You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JSF 2.3 f:websocket加密配置咨询:反向代理加密场景下的设置

JSF 2.3 <f:websocket> 在反向代理加密架构下的配置方法

嘿,针对你这种反向代理负责SSL加密、应用服务器(Payara 5.181)走明文的场景,我来梳理下<f:websocket>的配置要点,确保websocket连接能正常通过wss加密传输:

1. 让Payara正确识别反向代理的HTTPS上下文

由于代理会把客户端的真实请求协议(HTTPS)通过X-Forwarded-Proto等请求头传递给Payara,你需要配置Payara识别这些代理头,这样Mojarra才能自动生成wss://开头的websocket链接,而不是默认的ws://

配置方式(二选一):

  • 通过Payara管理控制台

    1. 登录Payara控制台,进入Configurations > server-config > Network Config > HTTP Listeners
    2. 编辑你正在使用的HTTP监听器(比如http-listener-1
    3. 勾选Enable Proxy Handling,然后在下方的Proxy Settings里:
      • 设置X-Forwarded-Prototrue
      • 如果代理使用标准HTTPS端口(443),可以设置Proxy Port443(确保生成的链接端口正确)
    4. 保存配置并重启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

火山引擎 最新活动