如何为Java Spring Boot WebSocket客户端配置线上可访问的URL?
你不需要修改WebSocket配置里的/websocket路径,该路径是服务端的相对路径,和域名绑定不需要在Spring Boot WebSocket配置中完成,按以下步骤配置即可实现在https://mywebsite.com/websocket下正常使用:
1. 调整WebSocket跨域配置
你当前的配置缺少跨域规则,线上域名访问时会被浏览器同源策略拦截,修改registerWebSocketHandlers方法如下:
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) { webSocketHandlerRegistry.addHandler(myHandler(), "/websocket") // 允许指定域名跨域,测试阶段可临时设置为"*" .setAllowedOrigins("https://mywebsite.com") .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy())); }
2. 配置反向代理(推荐Nginx)
通常不会直接把Spring Boot服务端口暴露到公网,用Nginx做反向代理即可实现域名路径和本地服务的映射,在你mywebsite.com对应的Nginx站点配置中添加以下规则:
server { # 你的HTTPS站点原有配置,已经配置好证书、监听443端口等 listen 443 ssl; server_name mywebsite.com; ssl_certificate 你的证书路径.pem; ssl_certificate_key 你的证书密钥路径.key; # 新增WebSocket路径代理规则 location /websocket { # 代理到服务器本地运行的Spring Boot服务 proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; # 开启WebSocket协议升级支持 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; # 调整WebSocket长连接超时时间,按需修改 proxy_read_timeout 3600s; } # 你站点其他的location规则,比如静态资源、后端接口代理等 }
重载Nginx配置后生效。
3. 客户端连接调整
线上HTTPS环境下,客户端需要使用wss协议连接,地址为:wss://mywebsite.com/websocket,禁止使用ws协议,否则会被浏览器判定为混合内容拦截。
4. 验证步骤
- 首先在服务器本地测试
ws://127.0.0.1:8080/websocket可正常连接,确认Spring Boot服务运行正常 - 配置完成后用客户端测试公网
wss://mywebsite.com/websocket连接即可
内容的提问来源于stack exchange,提问作者fnklstn
相关产品推荐
相关产品推荐

