对 Undertow-handlers.conf 进行 http https 重定向的高级调整

Advanced Tweak on Undertow-handlers.conf for http https redirect

我在 AWS 负载均衡器后面使用 WildFly。我希望 WildFly 中的 Undertow 服务器将 http 流量重定向到 https,我可以通过将以下行放在 undertow-handlers.conf:

中来成功地做到这一点

等于('http', %{i,X-Forwarded-Proto}) -> 重定向(https://app.server.com%U)

感谢 让我走到这一步!现在这是我想要的调整。有时我 运行 我的 Web 应用程序在使用 'dev.server.com' 的测试负载平衡器后面,有时我 运行 它在使用 'app.server.com.' 的生产负载平衡器后面 目前,我必须记住手动编辑undertow-handlers.conf 任何时候我切换平衡器。我希望有一种方法可以将硬编码的 'dev' 和 'app' 更改为机械的东西。有没有办法告诉 Undertow 只使用最初请求的域名?

谢谢。

如果您想将其保留为部署的一部分,请尝试在重定向表达式中使用 %h。例如:

equals('http', %{i,X-Forwarded-Proto}) -> redirect(https://%h%U)

另一种选择是配置服务器为您处理重定向。假设 http 的默认端口为 8080,https 的默认端口为 8443,CLI 命令将如下所示。

/subsystem=undertow/configuration=filter/rewrite=http-to-https:add(redirect=true, target="https://%h:8443%U")
/subsystem=undertow/server=default-server/host=default-host/filter-ref=http-to-https:add(predicate="equals(%p, 8080)")

您可以在 Undertow documentation.

中看到所有可能的交换属性

幸运的是,undertow 配置允许您通过 Exchange Attributes 访问请求 headers,您已经使用它来访问 X-Forwarded-Proto header。所以解决方案是简单地使用请求中的 Host header ,如下所示:

equals('http', %{i,X-Forwarded-Proto}) -> redirect(https://%{i,Host}%U)