Wildfly HTTP重定向配置:实现HTTP全请求重定向及目录访问限制
嘿,针对你这个Wildfly环境下的需求,最简单的实现方式就是利用Wildfly自带的Undertow服务器配置,不用额外部署任何web应用,改改配置文件就能搞定。我给你分两种场景说,看哪种更贴合你的需求:
场景1:所有HTTP请求直接重定向到HTTPS的ourserver.net(最简化)
如果你的核心目标就是让所有访问http://ourserver.com的用户都被重定向到https://ourserver.net,同时自然禁止HTTP访问webservice(因为都被转走了),那这个方案最省事:
先确认HTTP监听端口已开启
打开Wildfly安装目录下的standalone/configuration/standalone.xml(集群模式就找domain下的对应配置),找到<socket-binding-group>节点,确保有HTTP的绑定(没有就加上):<socket-binding name="http" port="${jboss.http.port:8080}"/>别忘了开放防火墙对应的端口(比如8080,要是想用80端口的话注意系统权限)。
添加全局重定向的Rewrite规则
找到<subsystem xmlns="urn:jboss:domain:undertow:XX.X">(XX.X是你Wildfly版本对应的Undertow版本),先在<filters>节点里加一个重定向过滤器:<filters> <!-- 保留原来的其他过滤器,添加下面这行 --> <rewrite name="http-to-ourserver-https" pattern="^/(.*)$" substitution="https://ourserver.net/$1" flags="R=301,L"/> </filters>然后在
<host name="default-host" alias="localhost">节点末尾加上这个过滤器的引用,只对非HTTPS请求生效:<host name="default-host" alias="localhost"> <!-- 保留原来的内容,添加下面这行 --> <filter-ref name="http-to-ourserver-https" predicate="not equals(%{HTTPS}, 'on')"/> </host>R=301是永久重定向,适合域名调整的场景,浏览器会缓存规则;临时调整可以换成R=302predicate用来判断是不是HTTP请求,确保HTTPS请求不受影响
重启Wildfly生效
改完配置重启服务器,现在所有HTTP请求都会被自动重定向到https://ourserver.net的对应路径,webservice自然没法通过HTTP访问,完全满足你的需求。
场景2:需单独控制webservice的HTTP访问
如果你确实需要临时拦截HTTP访问webservice,再把其他请求重定向,那可以加更细的规则:
在<filters>里多加一个拦截webservice的过滤器:
<filters> <rewrite name="http-to-ourserver-https" pattern="^/(.*)$" substitution="https://ourserver.net/$1" flags="R=301,L"/> <rewrite name="block-webservice-http" pattern="^/webservice/(.*)$" substitution="" flags="F"/> <!-- 返回403禁止访问 --> </filters>
然后在<host>节点里先配置webservice的拦截规则,再加全局重定向:
<host name="default-host" alias="localhost"> <!-- 先拦截HTTP访问webservice --> <location name="/webservice" handler="welcome-content"> <filter-ref name="block-webservice-http" predicate="not equals(%{HTTPS}, 'on')"/> </location> <!-- 其他HTTP请求重定向 --> <filter-ref name="http-to-ourserver-https" predicate="not equals(%{HTTPS}, 'on')"/> </host>
这样HTTP访问webservice会直接返回403,其他HTTP请求还是重定向到ourserver.net。不过说实话,这种场景不如直接全局重定向简洁,毕竟你的核心需求还是“确保所有HTTP访问均被重定向”,场景1应该更贴合。
注意点
- 配置里的
alias可以加上你的域名ourserver.com,比如<host name="default-host" alias="localhost, ourserver.com">,确保规则对域名生效 - 如果Wildfly版本较旧,Undertow的rewrite语法可能稍有不同,比如有些版本用
<rewrite-rule>代替<rewrite>,可以参考对应版本的官方文档调整
内容的提问来源于stack exchange,提问作者user1371844

