Si tenemos configurado y funcionando un servidor web podemos añadirle capacidades de websockets sin tener que complicarnos con nuevos puertos, certificados de seguridad, etc.
Para eso vamos a usar nginx como proxy inverso. En mi caso necesitaba poder conectar a un programa escrito en node mediante websockets (desde el navegador del cliente) y mediante http (desde mi API en el servidor).
El programa de node usa socket.io y escucha en el puerto 1978.
Esta es la configuración que he utilizado. En el fichero nginx.conf añadimos esta directiva dentro del bloque http:
upstream websocket {
server localhost:1978;
}
Y en el fichero de configuración de nuestro servidor, dentro del bloque server:
# Esta es la ruta que usa socket.io para escuchar conexiones de websockets
location /socket.io/ {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
# Esta es la ruta a la que podremos llamar desde la API.
location /fry/ {
proxy_pass http://localhost:1978;
}
En el código JS del cliente usaremos como host de conexión de socket.io https://midominio.com y para conectar desde PHP https://midominio.com/fry/endpoint
Muchas gracias, me funciono y la configuración fue a un servidor externo y usando mi servidor de nginx con proxy https para usarlo como wss.