当我尝试从Android stomp客户端连接到Spring Boot Web套接字时,它没有连接并且Catalina日志显示
Handshake failed due to invalid Upgrade header: null
Tomcat服务器在Apache后运行,Apache服务器在https上运行。我没有在Tomcat中添加https。所有的http请求都被重定向到https这就是我试图连接到websocket的方式
mStompClient = Stomp.over(Stomp.ConnectionProvider.JWS, "wss://chat.example.com/ws/chat/websocket", headers);
但它在本地机器上运行时有效
mStompClient = Stomp.over(Stomp.ConnectionProvider.JWS, "http://10.0.2.2:8080/chat/ws/chat/websocket", headers);
这是我的stomp终点设置
registry.addEndpoint("/chat").setHandshakeHandler(new HandShakeHandler()).withSockJS();
我启用了mod proxy wstunnel
并在我添加的虚拟主机配置中
ProxyPass / http://localhost:8080/chat/
proxyPassReverse / http://localhost:8080/chat/
ProxyPass /wss/ ws://localhost:8080/chat/
我怎样才能解决这个问题?
我从this server fault lin得到了答案。我必须补充一下
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /api/(.*) ws://newapp.example.com:8080/api/$1 [P]
并将最后一行更改为
RewriteRule /chat/(.*) ws://localhost:8080/chat/chat/$1 [P]
现在它已连接