使用spring-boot-starter-websocket,本地ws正常部署后wss连接失败求排查
我使用spring-boot-starter-websocket实现WebSocket连接,本地环境通过ws协议可正常连接,但部署应用后无法通过wss协议连接,服务端配置截图如下:
客户端代码截图如下:
以下是可能遗漏的配置项:
SSL证书配置:部署环境需配置有效SSL证书(生产环境建议使用权威机构颁发的证书,测试环境可使用自签证书)。在Spring Boot中,可通过配置文件完成设置:
server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=your-password server.ssl.key-store-type=PKCS12 server.ssl.key-alias=your-alias若通过反向代理(如Nginx)处理SSL,需确保代理能正确转发WSS请求至后端WS端口。
反向代理WSS转发规则:以Nginx为例,需添加对应转发配置,确保WSS请求被正确代理:
location /ws { proxy_pass http://localhost:8080/ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }同时Nginx需配置SSL证书并监听443端口,保证
wss://域名/ws能转发到后端的ws://localhost:8080/ws。路径匹配校验:确认客户端WSS连接路径与服务端WebSocket端点路径完全一致,若服务端配置了
server.servlet.context-path,客户端连接路径需包含该上下文路径。端口与防火墙配置:检查部署环境的防火墙或云安全组是否开放了443端口(WSS默认端口);若后端直接处理SSL,还需开放配置的SSL端口(如8443)。
WebSocket配置适配:Spring Boot配置SSL后会自动支持WSS,无需修改WebSocket注册代码,但要确保客户端连接地址为
wss://域名:端口/端点路径,避免硬编码ws协议地址。证书信任处理:若使用自签证书,浏览器等客户端可能拒绝连接,需在客户端导入证书,测试环境可临时忽略证书验证(生产环境禁止)。
内容的提问来源于stack exchange,提问作者utalmighty

