Recebi um erro 500 ao tentar acessar o ws: // localhost: 8080 / via meu servidor Apache2. Este servidor executa o OpenSuse Leap 42.1 e o Apache 2.4.16.
Estes módulos do Apache2 estão habilitados: mod_proxy, mod_proxy_http, mod_proxy_wstunnel.
Quando o pedido é chamado a partir da rede local, tudo funciona bem. Exemplo de URL: http://<myhost-ip-address>/api/ws/<some-url>
. Ele retorna o status 101 e a resposta: Upgrade: websocket
. Tudo bem.
O mesmo tipo de solicitação de rede externa falha. Exemplo de URL: ws://www.mysite.com/api/ws/<some-url>
. Retorna o erro 500.
O log de acesso do Apache contém: GET /api/ws/<some-url> HTTP/1.1" 500 ...
O log de erros do Apache contém: [proxy:warn] AH01144: No protocol handler was valid for the URL /api/ws/<some-url>. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Meu httpd.conf:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection for ws protocol
ProxyPreserveHost On
ProxyVia full
ProxyRequests OffHere
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/api/ws/(.*) [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
# Proxy pass
ProxyPass /api/ws/ ws://localhost:8080/api/ws/
ProxyPassReverse /api/ws/ ws://localhost:8080/api/ws/
# DocumentRoot
DocumentRoot /srv/www/vhosts/mysite.com
<Directory "/srv/www/vhosts/mysite.com">
Options Indexes SymLinksIfOwnerMatch
AllowOverride None
...
</Directory>
# URL as parameter
AllowEncodedSlashes NoDecode
Eu segui essas respostas anteriores (graças a isso): websockets , node.js , socket-io , mas sem sorte.
Algo deve estar errado na minha configuração. Alguma idéia?