undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS

Rule in undertow-handlers.conf to redirect HTTP to HTTPS

我在负载均衡器后面有一个 Wildfly,它们之间的连接始终是 HTTP。客户端和负载均衡器之间的连接可以是 HTTP 或 HTTPS。

负载均衡器设置了一个header(X-Forwarded-Proto)让Wildfly知道客户端使用的协议。

考虑到上述所有条件,我正在尝试编写一个 Undertow 规则以重定向到 HTTPS。

这是我比较成功的尝试之一(此规则写在 undertow-handlers.conf 文件中,并且是该文件中唯一的内容):

regex('/(.*)') and regex(pattern='http',value='%{i,X-Forwarded-Proto}',full-match=true)-> redirect(https://server.com/)

当客户端尝试访问 url 时: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} 下)。