Eu tenho :
Apache
(v2.4) na porta 80 do meu servidor parawww.domain1.com
, com mod_proxy e mod_proxy_wstunnel habilitadonode.js + socket.io
na porta 3001 do mesmo servidor.
O acesso www.domain2.com
(com porta 80) redireciona para 2. graças ao método descrito aqui . Eu defini isso na configuração do Apache:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Funciona para tudo, exceto a parte do websocket: ws://...
não são transmitidos como deveriam pelo proxy.
Quando eu acesso a página no www.domain2.com
, tenho:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Pergunta: Como tornar o proxy Apache o WebSockets também?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
não funcionou corretamente. Sugerindo usar em seuRewriteCond %{HTTP:Upgrade} =websocket [NC]
lugar.Em vez de filtrar por URL, você também pode filtrar por cabeçalho HTTP. Esta configuração funcionará para qualquer aplicativo da web que use websockets, também se não estiver usando socket.io:
fonte
Pode ser útil. Apenas todas as consultas são enviadas via ws para o nó
fonte
A partir do Socket.IO 1.0 (maio de 2014), todas as conexões começam com uma solicitação de pesquisa HTTP (mais informações aqui ). Isso significa que, além de encaminhar o tráfego do WebSocket, você precisa encaminhar todas
transport=polling
as solicitações HTTP.A solução abaixo deve redirecionar todo o tráfego de soquete corretamente, sem redirecionar qualquer outro tráfego.
Habilite os seguintes mods do Apache2:
Use essas configurações em seu arquivo * .conf (por exemplo
/etc/apache2/sites-available/mysite.com.conf
). Incluí comentários para explicar cada peça:Incluí uma seção extra para roteamento de
/node
tráfego que considero útil. Veja aqui para obter mais informações.fonte
RewriteRule /path/(.*)
Com a ajuda dessas respostas, finalmente consegui o proxy reverso para Node-RED rodando em um Raspberry Pi com Ubuntu Mate e Apache2 funcionando, usando esta configuração de site Apache2:
Eu também tive que habilitar módulos como este:
fonte
Para mim funciona depois de adicionar apenas uma linha no httpd.conf conforme abaixo (linha em negrito).
A versão do Apache é 2.4.6 no CentOS.
fonte
Minha configuração:
/api/ws
Conforme mencionado acima por @Basj, certifique-se de que o proxy a2enmod e ws_tunnel estejam habilitados.
Esta é uma captura de tela do arquivo de configuração do Apache que resolveu meu problema:
A parte relevante como texto:
Espero que ajude.
fonte
Fiz o seguinte para um aplicativo Spring rodando conteúdo static, rest e websocket.
O Apache é usado como proxy e ponto de extremidade SSL para os seguintes URIs:
Configuração Apache
Eu uso a mesma configuração vHost para a configuração SSL, não há necessidade de alterar nada relacionado ao proxy.
Configuração de primavera
fonte
Use este link para solução perfeita para ws https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Você deve apenas seguir o passo abaixo ..
Vamos para
/etc/apache2/mods-available
Passo 1
Ative
mode proxy_wstunnel.load
usando o comando abaixoPasso 2
Vamos para
/etc/apache2/sites-available
e adicione a linha abaixo em seu arquivo .conf dentro do host virtual
Nota: 8080 significa que sua porta de execução do tomcat porque queremos conectar
ws
onde nosso arquivo War colocado no tomcat e tomcat servir apache paraws
. obrigadoMinha Configuração
fonte
Para transporte "polling".
Lado Apache:
Lado do cliente:
fonte
Além da resposta principal: se você tiver mais de um serviço no mesmo servidor que usa websockets, você pode querer fazer isso para separá-los, usando um caminho personalizado (*):
Servidor de nó:
HTML do cliente:
Configuração do Apache:
(*) Nota: usar o padrão
RewriteCond %{REQUEST_URI} ^/socket.io
não seria específico para um site, e as solicitações de websockets seriam misturadas entre sites diferentes!fonte
FAÇAM:
Ter Apache 2.4 instalado (não funciona com 2.2),
a2enmod proxy
ea2enmod proxy_wstunnel.load
Faça isso na configuração do Apache,
basta adicionar duas linhas em seu arquivo onde 8080 é a porta de execução do tomcat
fonte