Yo tengo :
Apache
(v2.4) en el puerto 80 de mi servidor parawww.domain1.com
, con mod_proxy y mod_proxy_wstunnel habilitadosnode.js + socket.io
en el puerto 3001 del mismo servidor.
Accediendo www.domain2.com
(con el puerto 80) se redirecciona a 2. gracias al método aquí descrito . He configurado esto en la configuración de 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 todo, excepto para la parte websocket: ws://...
el proxy no los transmite como debería.
Cuando accedo a la página en www.domain2.com
, tengo:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Pregunta: ¿Cómo hacer que Apache también sea proxy de WebSockets?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
no me funcionó correctamente. Sugerir usarRewriteCond %{HTTP:Upgrade} =websocket [NC]
en su lugar.En lugar de filtrar por URL, también puede filtrar por encabezado HTTP. Esta configuración funcionará para cualquier aplicación web que use websockets, también si no usan socket.io:
fuente
Puede ser útil. Solo todas las consultas se envían a través de ws al nodo
fuente
A partir de Socket.IO 1.0 (mayo de 2014), todas las conexiones comienzan con una solicitud de sondeo HTTP (más información aquí ). Eso significa que, además de reenviar el tráfico de WebSocket, debe reenviar cualquier
transport=polling
solicitud HTTP.La siguiente solución debería redirigir todo el tráfico de socket correctamente, sin redirigir ningún otro tráfico.
Habilite las siguientes modificaciones de Apache2:
Utilice esta configuración en su archivo * .conf (por ejemplo
/etc/apache2/sites-available/mysite.com.conf
). He incluido comentarios para explicar cada pieza:He incluido una sección adicional para enrutar el
/node
tráfico que me parece útil, consulte aquí para obtener más información.fuente
RewriteRule /path/(.*)
Con la ayuda de estas respuestas, finalmente obtuve el proxy inverso para Node-RED ejecutándose en una Raspberry Pi con Ubuntu Mate y Apache2 funcionando, usando esta configuración del sitio Apache2:
También tuve que habilitar módulos como este:
fuente
Para mí, funciona después de agregar solo una línea en httpd.conf como se muestra a continuación (línea en negrita).
La versión de Apache es 2.4.6 en CentOS.
fuente
Mi configuración:
/api/ws
Como lo mencionó @Basj anteriormente, asegúrese de que el proxy a2enmod y ws_tunnel estén habilitados.
Esta es una captura de pantalla del archivo de configuración de Apache que resolvió mi problema:
La parte relevante como texto:
Espero que ayude.
fuente
Hice lo siguiente para una aplicación de primavera que ejecuta contenido estático, de descanso y de websocket.
Apache se utiliza como proxy y punto final SSL para los siguientes URI:
Configuración de Apache
Utilizo la misma configuración de vHost para la configuración de SSL, no es necesario cambiar nada relacionado con el proxy.
Configuración de primavera
fuente
Utilice este enlace para obtener una solución perfecta para ws https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Solo tienes que hacer el siguiente paso.
Ir
/etc/apache2/mods-available
Paso 1
Habilitar
mode proxy_wstunnel.load
usando el siguiente comandoPaso 2
Ir
/etc/apache2/sites-available
y agregue la siguiente línea en su archivo .conf dentro del host virtual
Nota: 8080 significa que su puerto de ejecución de tomcat porque queremos conectar
ws
donde nuestro archivo War colocado en tomcat y tomcat sirven para apachews
. graciasMi configuración
fuente
Para transporte de "votación".
Lado de Apache:
Lado del cliente:
fuente
Además de la respuesta principal: si tiene más de un servicio en el mismo servidor que usa websockets, es posible que desee hacer esto para separarlos, utilizando una ruta personalizada (*):
Servidor de nodo:
HTML del cliente:
Configuración de Apache:
(*) Nota: el uso del valor predeterminado
RewriteCond %{REQUEST_URI} ^/socket.io
no sería específico de un sitio web y las solicitudes de websockets se mezclarían entre diferentes sitios web.fuente
QUE HACER:
Tener instalado Apache 2.4 (no funciona con 2.2)
a2enmod proxy
ya2enmod proxy_wstunnel.load
Haga esto en la configuración de Apache,
simplemente agregue dos líneas en su archivo donde 8080 es su puerto de ejecución de tomcat
fuente