Configurando Proxy Reverso para Websocket no Apache

Em um post anterior mostramos como configurar o Apache como um Proxy Reverso, permitindo publicar sites hospedados em um servidor interno ou em sua DMZ externamente, sem expor diretamente esse servidor para acessos externos.

No entanto, caso a aplicação web hospedada no servidor de backend utilize o protocolo Websocket para manter uma conexão permanente entre cliente e servidor, são necessárias algumas configurações adicionais.

Basicamente, para que o Apache possa fazer corretamente o Proxy desse protocolo, é necessário utilizar o RewriteEngine para que quando seja identificado no cabeçalho HTTP enviado pelo cliente uma solicitação de “Upgrade” para Websocket, seja realizada a reescrita da requisição usando o endereço do servidor backend da aplicação.

RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "wss://localhost:8443%{REQUEST_URI}" [P,L]

As condições acima fazem simplesmente identificar no cabeçalho se os campos Upgrade e Connection foram definidos conforme a RFC que define o protocolo Websocket e faz a reescrita da URL da Request, trocando a parte do Host pelo endereço do servidor interno. No caso desse exemplo acima, o servidor de backend está no mesmo Host (localhost) mas em outra porta (8443).

Leave a Reply

Your email address will not be published. Required fields are marked *

4 × one =