ws protocol e configuração do apache mod_proxy_wstunnel: erro 500

5

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?

    
por jack-y 09.06.2016 / 11:21

1 resposta

1

Parece que você está perdendo o módulo mod_proxy_wstunnel, que é necessário para o suporte a Websockets.

Ele deve ser ativado como abaixo em seu httpd.conf

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

Instale o módulo & então deve funcionar bem.

    
por 09.06.2016 / 11:29