Apache 的 mod_dir 不断重定向到错误的端口

Apache 的 mod_dir 不断重定向到错误的端口

我在 Varnish 缓存前面设置了一个 HAProxy,它请求一个 Apache2 服务器。

Apache 正在端口 12345 上监听内部 IP,并配置为UseCanonicalPhysicalPort Off防止溢出该内部专用端口。我还测试了UseCanonicalPhysicalPortUseCanonicalName以及On的不同组合Off。然而,尽管有这些规范指令,Apache2 在接收没有尾部斜杠的目录请求时似乎会出现问题:

UCPP: On, UCN: Not set:
Request:  https://www.example.org/test-page
Response: Redirect(301) to http://www.example.org:12345/test-page/

UCPP: On, UCN: On
Request:  https://www.example.org/test-page
Response: Redirect(301) to https://www.example.org:12345/test-page/


UCPP: Off, UCN: Off
Request:  https://www.example.org/test-page
Response: Redirect(301) without Location header

这当然行不通,因为这个端口只是内部端口。该网站运行的是 Joomla,它与此设置配合得很好,只是那些从 mod_dir 重定向的文件夹似乎不起作用。我的 Apache 配置如下所示:

<VirtualHost 192.168.150.100:12345>
    ServerName www.example.org

    UseCanonicalPhysicalPort Off
    UseCanonicalName On

    <Directory "/var/www/www.example.org">
    [...]
</VirtualHost>

有没有办法防止这些重定向?最好的办法是防止 Apache 内部出现这些错误的重定向,但我愿意对 Varnish 或 HAProxy 的配置进行更改。

笔记:请不要建议使用端口 80,因为我在 Apache 上有多个端口被 varnish 使用(一种让 VHosts 更好地运行的解决方法),因此这不是选择。

答案1

没有尾部斜杠的目录 URL 不是此资源的规范 URL,这就是为什么mod_dir重定向用户。这是 W3C 的一般建议。

使用自定义端口进行重定向可能是因为您的 HAproxy 或 Varnish 正在创建一个新的 HTTP 请求并发送给 Apache。您的 Apache 收到的第一个请求的端口已经存在。这就是和似乎无效的12345原因。UseCanonicalNameUseCanonicalPhysicalPort

但你可以通过设置mod_dir DirectorySlash指令Off

如果test-page实际上是文件系统上现有的目录,那么它应该可以正常工作。

相关内容