如何使用 Apache httpd 重定向两个不同的端口?

Posted

技术标签:

【中文标题】如何使用 Apache httpd 重定向两个不同的端口?【英文标题】:How to redirect two different ports using Apache httpd? 【发布时间】:2018-03-20 17:25:09 【问题描述】:

我为我的 Web 应用程序设置了 SSL。此应用程序的标准端口是 8080,SSL 端口是 8443。我的 Apache httpd 配置有问题。我想重定向下面列出的所有网址:

http://1.2.3.4:8080
https://1.2.3.4:8080
http://1.2.3.4:8443

到这个网址:

https://1.2.3.4:8443

我把 httpd.conf 改成了这个:

Listen 1.2.3.4:8080

<VirtualHost *:8080>
    ServerName 1.2.3.4
    Redirect "/" "https://1.2.3.4:8443"
</VirtualHost>

上面列出的第一个 url 可以正常工作,但不能用于其他 url。我尝试了不同的配置,但它们不起作用。谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:
https://1.2.3.4:8080
http://1.2.3.4:8443

如果 HTTP 在端口 8080 上提供服务,而 HTTPS (SSL) 在 8443 上,则上述 URL 均不可访问以触发重定向。 (?!)

在您的配置中,HTTP 端口 8080,HTTPS 端口 8443。

参考:https://serverfault.com/questions/359461/apache-answer-both-http-and-https-on-the-same-port

【讨论】:

好吧,你说得对,我明白了。但是当httpd监听8080端口时,有没有办法将http://1.2.3.4:8443重定向到https://10.200.200.91:8443 HTTP 重定向仅发生在请求在您的服务器上解决之后。如果 HTTP 正在侦听端口 8080,那么像 http://1.2.3.4:8443 这样的请求将永远无法正确解析,并且浏览器将超时。为了满足您的要求,您需要 Apache 在端口 8080 8443(已经与 SSL 共享?)上响应 HTTP - 这对于 Apache AFAIK 是不可能的。我认为这可能通过某种可以拦截和转移此类请求的前端代理来实现?【参考方案2】:

在你的 httpd.conf 中配置 mod_rewrite 来实现这样的重定向

例如:

LoadModule rewrite_module  modules/mod_rewrite.so
RewriteEngine on
<VirtualHost 1.2.3.4:8080>
  <IfModule mod_rewrite.c>
    RewriteCond %SERVER_PORT !^8443$
    RewriteRule ^/(.*) https://%HTTP_HOST/$1 [L,R]
  </IfModule>
</VirtualHost>

LoadModule rewrite_module  modules/mod_rewrite.so
RewriteEngine on
RewriteCond %SERVER_PORT =8080
RewriteRule ^(.*) https://%HTTP_HOST:8443/$1 [L,R]

【讨论】:

第一个示例代码对我不起作用。第二个与我在第一篇文章中的代码相同。 您在这里所做的只是实现标准的 HTTP 到 HTTPS(临时)重定向,这不是 OP 所要求的。

以上是关于如何使用 Apache httpd 重定向两个不同的端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用真实姓名将url重定向到httpd.conf中的另一个站点

通过centos 8上的mod_jk将apache httpd重定向到tomcat

Apache httpd:将全局重定向的 Content-Type 更改为 application/json

带有 mod24_ssl 的 Apache httpd24 不会从 http 重定向到 https

使用 httpd.conf 将 index.html 重定向到根目录

Apache重定向URL