Apache 反向代理 - 没有 / 的 URL 被拒绝

Apache 反向代理 - 没有 / 的 URL 被拒绝

我使用反向代理来显示子域的后端服务器内容。subdomain.mydomain.com(服务器 A)应显示 IP 为 123.123.123.123 端口为 1111 的服务器(服务器 B)的内容。

subdomain.mydomain.com 的虚拟主机(服务器 A):

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName subdomain.mydomain.com

SSLEngine on
SecAuditEngine On
RewriteEngine On
SSLProxyEngine on
ProxyPreserveHost On
LogLevel warn

<Directory />
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Location />
    ProxyPass https://123.123.123.123:1111
    ProxyPassReverse https://123.123.123.123:1111
</Location>

ErrorLog /var/log/apache2/error.log

SSLProtocol             all -SSLv2 -SSLv3
SSLHonorCipherOrder     on
SSLVerifyClient none
SSLVerifyDepth 1

SSLCertificateFile /etc/apache2/cert.site/chain_wildcard_site_combined.crt
SSLCertificateKeyFile /etc/apache2/cert.site/key_wildcard_site.key
 
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

</VirtualHost>                                  
</IfModule>

123.123.123.123:1111的虚拟主机(服务器B):

<IfModule mod_ssl.c>
    <VirtualHost 123.123.123.123:1111>
        DocumentRoot /srv/www/site/htdocs

SSLEngine on
RewriteEngine On
SSLProxyEngine on
ProxyPreserveHost On
LogLevel warn

<Location "/">
   Require ip 222.222.222.222
</Location>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory /srv/www/site/htdocs>
    Options -Indexes +FollowSymLinks +MultiViews
    DirectoryIndex index.php
    AllowOverride None
    Require all granted
</Directory>

ErrorLog /srv/www/site/log/error.log
CustomLog /srv/www/site/log/access.log combined
CustomLog /srv/www/site/log/ssl_request_log \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

SSLProtocol             all -SSLv2 -SSLv3
SSLHonorCipherOrder     on
SSLVerifyClient none
SSLVerifyDepth 1

SSLCertificateFile /etc/apache2/cert.site/chain_wildcard_site_combined.crt
SSLCertificateKeyFile /etc/apache2/cert.site/key_wildcard_site.key

        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

    </VirtualHost>
</IfModule>

如果我加载 URL: https://subdomain.mydomain.com/dir/

它加载成功。

如果我加载 URL(不带尾部斜杠): https://subdomain.mydomain.com/dir

它导致错误页面:ERR_CONNECTION_REFUSED。

编辑1:

我执行命令:

curl -IL https://subdomain.mydomain.com/dir

我得到了这个结果:

HTTP/1.1 301 Moved Permanently
Date: Mon, 23 Aug 2021 13:45:13 GMT
Server: Apache
Strict-Transport-Security: max-age=15768000; includeSubDomains
Strict-Transport-Security: max-age=15768000; includeSubDomains
Location: https://subdomain.mydomain.com:1111/dir/
Content-Type: text/html; charset=iso-8859-1

curl: (7) Failed to connect to subdomain.mydomain.com port 1111: Connection refused

编辑2:

我添加了尾部斜杠

<Location />
    ProxyPass https://123.123.123.123:1111/
    ProxyPassReverse https://123.123.123.123:1111/
</Location>

但我还是明白连接被拒绝错误。

知道为什么缺少尾随斜杠会导致错误吗?

谢谢!

答案1

检查防火墙设置和服务器 B 上的服务器日志,并验证服务器 A 是否能够使用正确的 IP 地址作为发送方(我假设是 222.222.222.222)访问服务器 B。服务器 B 的列表也缺少指令Listen 1111 https

编辑 后端服务器正在强制重定向:

HTTP/1.1 301 Moved Permanently
Location: https://subdomain.mydomain.com:1111/dir/

由于 HSTS 标头存在且不存在任何重写规则,因此我认为是应用程序发出了重定向。

验证一下是哪一个。

您说添加“/”后一切正常。mod_rewrite在前端服务器上强制使用尾随的“/”对我来说似乎是一个可以接受的解决方案。

答案2

看起来这个问题已经有人回答了这里仍然要回答你的问题,

ProxyPass 和 ProxyPassReverse 指令末尾都缺少正斜杠。

如果您需要更多详细信息来了解为什么会出现这种情况。

答案3

您的反向代理没有(可能不应该)监听端口 1111。

然而,您的 123 服务器正在重定向到端口 1111(根据您发布的配置的假设)。

相关内容