Apache 2.4 将 https 重定向到另一个端口

Posted

技术标签:

【中文标题】Apache 2.4 将 https 重定向到另一个端口【英文标题】:Apache 2.4 redirect https to another port 【发布时间】:2018-04-27 07:04:30 【问题描述】:

我是一个菜鸟,但我已经为此苦苦挣扎了一段时间,我肯定做错了什么。

我们使用 Apache 2.4 作为内部网页的前端。

当我尝试将请求转发到 80 以外的端口时,它会发疯并被重定向多次 http://demos.company.com/demos.company.com/demos.company.com/demos.company.com/demos.company.com/demos.company.com/demos.company.com/[...]/demos.company.com/WebApplicationFail

httpd.conf:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so

<VirtualHost *:80>
    RewriteEngine on
    RewriteCond %HTTPS !on
    RewriteRule ^(.*) %HTTP_HOST%REQUEST_URI [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:/Program Files/Apache24/conf/ssl/company.crt"
    SSLCertificateKeyFile "C:/Program Files/Apache24/conf/ssl/company.key"
    SSLCertificateChainFile "C:/Program Files/Apache24/conf/ssl/CA.pem"

    # Proxy configuration
    ProxyPreserveHost On
    ProxyRequests Off
    ServerName demos.company.com

    ProxyPass /WebApplicationOK http://10.0.0.160/WebApplicationOK
    ProxyPassReverse /WebApplicationOK http://10.0.0.160/WebApplicationOK
    ProxyPass /WebApplicationFailRoute http://10.0.0.125:8000/WebApplicationFail
    ProxyPassReverse /WebApplicationFailRoute http://10.0.0.125:8000/WebApplicationFail
</VirtualHost>

我们需要维护每个http请求到https的重定向。

如果可能,我们需要 Internet 地址“https://demos.company.com/ThisContext”显示 Intranet Web“http://10.0.0.125:8000/OtherContext”。

提前致谢。

【问题讨论】:

在你的 你可能想重定向到https://%HTTP_HOST%REQUEST_URI 重启httpd服务有没有报错? apache和重定向服务器是在同一台机器上吗? 不,我在启动 Apache 时没有任何错误。 Apache 2.4 机器重定向到其他机器中的 web(通常使用 Tomcat 或其他 Java 应用程序服务器) 【参考方案1】:

这就是为琐碎任务添加复杂指令的问题。

您有一个使用端口 80 的虚拟主机,为什么还要检查 SSL?,它收到的所有内容都不是 SSL。

rewrite 指令也缺少方案。

就这样:

RewriteRule ^/(.*) https://%HTTP_HOST/$1 [R,L]

如果您不需要使用变量,对于变量主机名,我会更简单:

Redirect / https://whateverhost.example.com/

在 httpd 中成功的规则:始终使用最简单的选项。

【讨论】:

感谢您的回答。从 http 到 https 的重定向已经开始工作。我想要的是,当您向地址“demos.company.com/WebApplicationFailRoute”发出请求时,会显示网页“10.0.0.125:8000/WebApplicationFail”,而不是在 Internet 上发布。结果是重定向太多。问题出在端口上,当我重定向到标准端口时,它可以工作。 “demos.company.com/WebApplicationOK”,正确显示“10.0.0.160/WebApplicationOK”。 对不起,我没有关注。【参考方案2】:

我知道了,其实很简单。您只需将这些行从下面重定向到您的 ssl.conf 我猜

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName XXXX.ddns.net
    # These are your SSL settings; your responsibility
    SSLCertificateFile /etc/letsencrypt/live/XXXX.ddns.net/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/XXXX.ddns.net/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    # Your document root; where the javascript application lives
    DocumentRoot /var/www/html
    <Directory /var/www/html/ >
        Options -Indexes +FollowSymLinks -MultiViews
        AllowOverride None
        Order Allow,Deny 
        Allow From All
    </Directory>

    # Reverse proxy settings for API (custom redirection https to specific port)
    ProxyRequests     Off
    ProxyPreserveHost On
    <Location /api >
        ProxyPass        http://127.0.0.1:3000/api
        ProxyPassReverse http://127.0.0.1:3000/api
    </Location>
</VirtualHost>

【讨论】:

它可以重定向到一个端口,谢谢@Rizky Yoga Oktora。是否有某种方法可以同时重定向上下文和端口? ProxyPass otherhost:3000/context2 ProxyPassReverse otherhost:3000/context2 myhost/context1 重定向到 myhost/context2,但它似乎没有占用端口。

以上是关于Apache 2.4 将 https 重定向到另一个端口的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.4 重定向直接 IP 访问

Apache 2.4 精确重定向匹配字符串

登录页面未重定向到另一页面

apache 2.4中的htaccess重定向301不起作用

text nginx位置规则将非现有图像重定向到另一台服务器

Apache重定向到另一个端口