当主机头没有端口时,让 Apache2 也不使用端口来引用自引用 URL

当主机头没有端口时,让 Apache2 也不使用端口来引用自引用 URL

我需要在客户服务器上的 Apache2 安装前安装一个反向代理。该反向代理的作用是代理子域下的一些其他应用程序(在其他端口上内部运行)、处理 SSL 终止和其他一些事情。现有的应用程序 URL 应该仍然有效,因此它还必须代理现有的 Apache。该服务器相当老旧,运行的是 Apache 2.4.7。

我的问题是这样的:我已将 Caddy 设置为反向代理并将其配置为透明,因此Host标头被转发。

然后,我将 Apache 配置为监听端口 81 而不是 80,这样 Caddy 就可以监听 80 并将请求转发到 81。

问题是,当 Apache 构建自引用 URL 时(例如重定向到尾部斜杠时),它仍将包含:81在 URL 中(在 PHP 中SERVER_PORT也是 81)。我已经设置了UseCanonicalPhysicalPort offUseCanonicalName off,但仍然会发生这种情况(主机名正确,但端口不正确)。

请注意,如果我将反向代理放在非标准端口(如 2015)上(因此Host标头现在也将包括:2015在末尾),那么它实际上会起作用,Apache 也会返回重定向到 2015 的 URL(PHP 也会将其视为SERVER_PORT2015 而不是 81),但如果端口为 80,则不会返回,因此Host标头中没有端口。似乎如果标头中没有端口Host,Apache 会回退到物理端口,而不是简单地省略端口(并向 PHP 报告 80)。文档说它应该首先考虑端口ServerName,但即使我:80在末尾添加,也没有什么区别。

我能做什么呢?

(我还担心 SSL 以后会发生什么,但我还没有到那一步。)


apache2ctl -S输出:

VirtualHost configuration:
*:81                   localhost (/etc/apache2/apache2.conf:277)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

我有一个解决方法,但这是一个不寻常的配置,可能会让下一个在这个服务器上工作的人绊倒,而且我通常也不会这样配置,所以我不确定它可能会带来什么意想不到的问题...但无论如何:我可以将 Caddy 设置为仅绑定在外部 IP 上,将 Apache 设置为仅绑定在本地主机上,然后让它们两个都在端口 80 上,但在不同的接口上。​​然后它就可以正常工作了。- 不过,我还是想解决根本问题。

相关内容