JSF 2.3 f:websocket加密配置咨询:反向代理加密场景下的设置
<f:websocket> 在反向代理加密架构下的配置方法 嘿,针对你这种反向代理负责SSL加密、应用服务器(Payara 5.181)走明文的场景,我来梳理下<f:websocket>的配置要点,确保websocket连接能正常通过wss加密传输:
1. 让Payara正确识别反向代理的HTTPS上下文
由于代理会把客户端的真实请求协议(HTTPS)通过X-Forwarded-Proto等请求头传递给Payara,你需要配置Payara识别这些代理头,这样Mojarra才能自动生成wss://开头的websocket链接,而不是默认的ws://。
配置方式(二选一):
通过Payara管理控制台:
- 登录Payara控制台,进入
Configurations > server-config > Network Config > HTTP Listeners - 编辑你正在使用的HTTP监听器(比如
http-listener-1) - 勾选Enable Proxy Handling,然后在下方的
Proxy Settings里:- 设置
X-Forwarded-Proto为true - 如果代理使用标准HTTPS端口(443),可以设置
Proxy Port为443(确保生成的链接端口正确)
- 设置
- 保存配置并重启Payara
- 登录Payara控制台,进入
手动修改domain.xml:
找到对应HTTP监听器的配置段,添加/修改以下属性:<http-listener name="http-listener-1" port="8080" protocol="http-listener-1" transport="tcp" enable-proxy-handling="true" x-forwarded-proto="true" proxy-port="443"/>
2. 确保反向代理正确转发WebSocket请求
你的反向代理需要支持WebSocket的升级协议,以确保wss请求能正确转发到Payara的ws端点。以常见的Nginx为例,配置示例如下:
location /your-app-context/javax.faces.push { proxy_pass http://your-payara-host:8080; proxy_http_version 1.1; # 必须设置升级头,支持WebSocket握手 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 传递真实的协议和主机头给Payara proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; # 可选:设置超时时间,避免长连接被断开 proxy_connect_timeout 7d; proxy_send_timeout 7d; proxy_read_timeout 7d; }
注意:
javax.faces.push是JSF 2.3 websocket的默认端点路径,如果你通过javax.faces.WEBSOCKET_ENDPOINT_PATH自定义了路径,要替换成对应的路径。
3. 验证WebSocket链接生成
配置完成后,你可以打开浏览器开发者工具的“网络”标签,触发websocket连接,检查请求的URL是否是wss://开头,且能成功建立连接。如果Mojarra还是生成ws://链接,可以手动指定websocket的URL:
在web.xml中添加上下文参数:
<context-param> <param-name>javax.faces.WEBSOCKET_SOCKET_URL</param-name> <param-value>wss://${request.serverName}/your-app-context/javax.faces.push</param-value> </context-param>
这个参数会强制Mojarra生成指定的wss链接,适合代理端口是默认443的场景(如果用了非标准端口,需要加上:端口号)。
4. 确认现有配置的兼容性
你已经在web.xml中设置了<transport-guarantee>NONE</transport-guarantee>,这个配置是正确的——因为加密由代理负责,应用服务器不需要处理SSL,不会影响websocket的正常工作。
内容的提问来源于stack exchange,提问作者LTrenker




