无法连接到Apache后面的Tomcat Web套接字

时间:2019-02-20 19:57:56

标签: java android spring-boot spring-websocket stomp

当我尝试从Android stomp客户端连接到Spring Boot Web套接字时,它没有连接并且Catalina日志显示

Handshake failed due to invalid Upgrade header: null

Tomcat服务器在Apache后面运行,而Apache服务器在https上运行。 我尚未在Tomcat中添加https 。所有http请求都重定向到https,这就是我尝试连接到网络套接字的方式

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);

这是我的终极终点设置

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/

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我从this server fault林那里得到了答案。我必须添加

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]

现在它已连接