我正在尝试让Vaadin 7.1.5 Push在Apache Tomcat 7.0.42 + Apache HTTP服务器(2.2.14和mod_proxy_wstunnel模块)上工作。
当我直接访问Tomcat(即http://mydomain:8080/myapp)时,Vaadin应用程序和使用WebSocket的push正常工作。问题出现在我尝试使用Apache模块mod_proxy&mod_proxy_wstunnel进行访问时,应用程序会挂起,加载指示器变为红色,并在浏览器控制台中获取推送请求的以下错误:
我怀疑mod_proxy_wstunnel有问题,但是当我代理http://echo.websocket.org时,它似乎工作正常。我发现501错误是由Atmosphere引起的,但我不知道如何调试它。如果我删除ws代理(因此推送使用HTTP而不是WS),我会立即收到“会话过期”错误。
有人知道如何正确地将推送请求从Apache HTTP服务器代理到Apache Tomcat吗?
当我直接访问Tomcat(即http://mydomain:8080/myapp)时,Vaadin应用程序和使用WebSocket的push正常工作。问题出现在我尝试使用Apache模块mod_proxy&mod_proxy_wstunnel进行访问时,应用程序会挂起,加载指示器变为红色,并在浏览器控制台中获取推送请求的以下错误:
HTTP Status 501 - Websocket protocol not supported
type Status report
message Websocket protocol not supported
description The server does not support the functionality needed to fulfill this request.
Apache Tomcat/7.0.42
在需要使用Push之前,我使用mod_jk将请求从http://mydomain/myapp
转发到http://mydomain:8080/myapp
。显然,mod_jk不支持WebSocket,因此我选择使用ProxyPass指令。以下是我的Apache配置:
ProxyPass /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/
ProxyPassReverse /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/
ProxyPass /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPassReverse /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPass /myapp http://localhost:8080/myapp
ProxyPassReverse /myapp http://localhost:8080/myapp
我怀疑mod_proxy_wstunnel有问题,但是当我代理http://echo.websocket.org时,它似乎工作正常。我发现501错误是由Atmosphere引起的,但我不知道如何调试它。如果我删除ws代理(因此推送使用HTTP而不是WS),我会立即收到“会话过期”错误。
有人知道如何正确地将推送请求从Apache HTTP服务器代理到Apache Tomcat吗?
ProxyPass / http://app.domain.com:8080/
。我确实需要在“PUSH”后面删除尾随的“/”。 - Aron