2017-07-24 42 views
0

我用WildFly后面的AWS负载平衡器。我希望WildFly中的Undertow服务器将http流量重定向到https,并且我可以通过将下面的行放置在undertow-handlers.conf中成功完成此操作:高级TWEAK上暗潮,handlers.conf用于HTTP重定向HTTPS

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

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

谢谢。

回答

1

幸运的是,低调配置让您可以通过Exchange Attributes访问请求标题,您已经使用它来访问X-Forwarded-Proto标题。因此该解决方案是简单地使用Host头从请求像这样:

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

1

如果你想保持它作为部署的一部分,请尝试使用重定向表达式%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中看到所有可能的交换属性。

+0

谢谢,@詹姆斯。我尝试在Undertow的%h中替换'dev.server.com',但它不起作用:重定向不再起作用。我猜测%h不是所请求域的确切副本。 –

+0

是的,我猜它可能不是一个确切的副本。 http://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html#getHostString--。如果您使用了高级子系统设置,但您可以在重写过滤器上使用目标属性的表达式。 '目标= “https://开头$ {jboss.host.name:%h}:8443%U”' –