我在负载均衡器后面有一个 Wildfly,它们之间的连接始终是 HTTP。客户端和负载均衡器之间的连接可以是 HTTP 或 HTTPS。
负载均衡器设置一个 header (X-Forwarded-Proto),让 Wildfly 知道客户端正在使用哪个协议(protocol)。
我正在尝试编写一个 Undertow 规则来重定向到 HTTPS,同时考虑到上述所有条件。
这是我比较成功的尝试之一(此规则写在 undertow-handlers.conf 文件中,并且是该文件中唯一的内容):
regex('/(.*)') and regex(pattern='http',value='%{i,X-Forwarded-Proto}',full-match=true)-> redirect(https://server.com/${1})
当客户端尝试访问如下网址时:http://server.com/myapp 被重定向到 https://server.com,但路径/myapp 丢失。
如何修复 Undertow 规则以保留完整路径?
最佳答案
尝试:
equals('http', %{SCHEME}) -> redirect(https://server.com/%U)
或者
equals('http', %{i,X-Forwarded-Proto}) -> redirect(https://server.com/%U)
取决于您是否在 HTTP 监听器中启用了代理地址转发(如果您启用了 undertow,则会自动处理 X-Forwarded-Proto,以便它显示在 %{SCHEME} 下)。
关于redirect - undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37791759/