我已经进行了以下配置:
haproxy(80,443)--> httpd(8443)--> tomcat(8096)
转到https://websrv1/test
将导致 301 重定向到 haproxy 应代理请求的 httpd 端口。因此用户被重定向到http://websrv1:8443/test
。
但是,如果用户去https://websrv1/test/ - specifying a the trailing slash
- 它就可以正常工作。
当用户未指定尾随斜杠时,如何防止这种重定向发生?
- haproxy 配置?
- apache url 重写?
- tomcat url 重写?
答案1
答案2
我知道这是一篇老帖子,但是由于我甚至在 2024 年使用 tomcat 10.1 时也一直在努力解决这个问题,并且在最终起作用之前尝试了太多选项,所以我决定发布我发现的内容。
总结:
scheme="https"
在您的块中设置<Connector>
。问题源自 Tomcat。
我找到这个解决方案的途径
我只发现了这个问题和另外一个问题:Tomcat 尾部斜杠与代理转发但关于这个话题,仅此而已。
由于我们也有 nginx/tomcat 的混合,我无法找出是谁在执行 https 到 http 的重定向。我将展示我尝试过的方法,如果上述解决方案不起作用,它们可能适用于您的情况。
- 尝试 1:添加
proxyPort="443"
到<Connector>
阻止。在糟糕的重定向中失败http://hostname:443/path
- 尝试 2:添加
mapperContextRootRedirectEnabled="false" mapperDirectoryRedirectEnabled="false"
到<Context>
区块中。也尝试过,true
但遗憾的是没有任何变化。 useRelativeRedirects="true"
尝试 3:在块中设置<Context>
。虽然这听起来非常有用,而且在直接向 tomcat 发出请求(不使用 nginx)时确实有效,并给出了重定向/path
。但在通过 nginx 发出请求时,这似乎不起作用。我真的希望有一天我能解决这个问题。- 尝试 4:确保这确实是 Tomcat 的错误,因为上述设置在本地有效。通过
sendRedirectBody="true"
在<Context>
块中设置可以清楚地看出这是 tomcat 的问题,因为响应主体现在也包含错误的重定向 URL。 - 尝试 5:阅读https://tomcat.apache.org/tomcat-10.1-doc/config/http.html#Common_Attributes希望找到一些有用的东西。如前所述,这使我改变了
scheme="https"
块<Connector>
,问题就消失了。
希望这可以让其他人免于头痛。