【问题标题】:Rule in undertow-handlers.conf to redirect HTTP to HTTPSundertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS
【发布时间】:2016-10-13 23:46:19
【问题描述】:

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

负载均衡器设置一个标头 (X-Forwarded-Proto) 让 Wildfly 知道客户端正在使用哪个协议。

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

这是我比较成功的尝试之一(这条规则写在 undertow-handlers.conf 文件中,它是该文件中唯一的东西):

regex('/(.*)') 和 正则表达式(pattern='http',value='%{i,X-Forwarded-Proto}',full-match=true)-> 重定向(https://server.com/${1})

当客户端尝试访问如下网址时:http://server.com/myapp 被重定向到 https://server.com,但路径/myapp 丢失。

如何修复我的 Undertow 规则以保留完整路径?

【问题讨论】:

  • 我真的不知道这条 Wildfly 规则(通过 Undertow 编写)来应用一些重定向,但我想猜测一下我在阅读您的问题时想到的一些事情:是“regex(' /(.*)')" 应该只匹配“相对路径”,否则它将匹配整个 URL(例如“server.com/some_endpoint)?
  • 它只匹配相对路径,我在其他场景中使用过,效果很好。但这是我第一次使用带有 2 个正则表达式条件的谓词,我不知道这是否会成为问题。

标签: redirect wildfly undertow


【解决方案1】:

试试:

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} 下)。

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 2015-11-15
    • 2015-03-11
    • 2013-06-02
    • 2011-12-04
    • 1970-01-01
    • 2015-08-19
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多