Como obter o trabalho Vaadin Push através do servidor HTTP Apache?
Estou tentando obter o Vaadin 7.1.5 Push para trabalhar no Apache Tomcat 7.0.42 + servidor HTTP Apache (2.2.14 com mod_proxy_wstunnel).
O aplicativo Vaadin e o push com WebSocket funcionam bem quando eu acesso o Tomcat diretamente (ou seja,http://mydomain:8080/myapp
). O problema surge quando tento acessá-lo usando os módulos do Apache mod_proxy & mod_proxy_wstunnel. O que acontece é que o aplicativo trava, o indicador de carga fica vermelho e eu recebo esse erro na solicitação de envio no console do navegador:
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
Antes do Push ser necessário, usei o mod_jk para encaminhar solicitações dehttp://mydomain/myapp
parahttp://mydomain:8080/myapp
. Aparentemente mod_jk não suporta WebSocket, então eu escolhi usar a diretiva ProxyPass. Aqui está minha configuração do 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
Eu estava suspeitando que mod_proxy_wstunnel era o culpado, mas aparentemente funciona bem quando eu proxyhttp://echo.websocket.org. Descobri que o erro 501 é lançado pelo Atmosphere, mas não tenho a menor idéia de como depurá-lo. Se eu remover o proxy ws (para que o envio use HTTP em vez de WS), recebo um erro instantâneo "Session expired".
Alguém sabe como propagar corretamente as solicitações de envio do servidor HTTP Apache para o Apache Tomcat?