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

Posted

技术标签:

【中文标题】undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS【英文标题】:Rule in undertow-handlers.conf to redirect HTTP to 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 个正则表达式条件的谓词,我不知道这是否会成为问题。 【参考方案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 下)。

【讨论】:

以上是关于undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView

如何用ruby中的数组中的元素替换字符串中的单词?

如何将视图中的 javascript 代码中的对象列表传递给控制器​​中的操作方法

如何从账户 A 中的 Lambda(VPC 中的 Lambda)调用账户 B 中的 AWS Lambda 函数(VPC 中的这个 Lambda)

我可以在 apatch 中的 php 文件中播放位于硬盘中的文件路径中的视频吗?

子窗口访问父页面iframe中的iframe,top打开的子窗口访问父页面中的iframe中的iframe