这实际上可能是不可能的,但无论如何还是要尝试:我想为 Apache 创建容器映像,而无需以 root 身份运行。因此,我设置了 VirtualHost 来监听端口 8080,而不是任何 <1024 的端口。Apache 之前有一个代理,它将端口 80 的流量定向到容器上的端口 8080。但是,当我进行 Apache 重定向时,它总是将端口添加到 Location 标头。因此重定向返回的是“Location:http://我的网站:8080/index“,这将失败,因为没有任何内容公开监听端口 8080。
有什么方法可以告诉 Apache 永远不要将端口号添加到这些重定向中?我尝试使用 UseCanonicalPhysicalPort,但似乎没有达到预期的效果。有什么方法可以阻止它将端口号添加到任何东西中?
编辑
好的,看起来这种行为是硬编码的,当我查看 mod_rewrite 的源代码时,我注意到它调用“ap_is_default_port”来确定是否应该在答案中添加端口。而覆盖它的唯一方法是覆盖这行我认为是在源代码中。如果有人知道更好的答案,我洗耳恭听。
答案1
评论太长了
恕我直言,你正在尝试解决错误的问题
问题不在于 Apache 在 Location 标头中包含了它正在监听的端口号(因为就 Apache 而言,这是正确的行为,它确实在监听端口 8080),而在于您的反向代理没有纠正这一点。
通常,反向代理应该重写位置标头(和其他标头),并将对后端服务器使用的内部 URI 的任何引用更改为客户端需要使用的 URI,以到达反向代理/负载均衡器。
检查你的反向代理(treafik)配置来找出为什么这种情况不会发生。