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
如何将视图中的 javascript 代码中的对象列表传递给控制器中的操作方法
如何从账户 A 中的 Lambda(VPC 中的 Lambda)调用账户 B 中的 AWS Lambda 函数(VPC 中的这个 Lambda)