Tengo varios servicios que estoy colocando detrás de un proxy inverso NGINX, que fue bastante simple de configurar, pero tuve un problema con websockets. Un único punto final es lo suficientemente simple como para especificarlo con una ubicación que incluya
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
El problema es que hay muchos puntos finales con websockets. Y seguimos encontrando cosas nuevas que no funcionan porque hay otro punto final de websocket que no conocíamos.
¿Hay alguna manera de configurar el encabezado Upgrade
y solo Connection
si el cliente lo pasa? Si incluyo esas dos líneas para todo el servicio, intentará actualizarcadaconexión, no sólo los websockets.
Respuesta1
Simplemente tuve el mismo problema y estaba luchando contra declaraciones if en la configuración de nginx y me di cuenta de estas directivas:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
no hagas nadaa menos queel cliente establece un Upgrade
encabezado.
Entonces, en lugar de agregar Location
una directiva específica para cada punto final de websocket, puedes crear una global:
server {
listen 443 ssl;
server_name my-server.example
location / {
proxy_pass http://local-service.example/;
proxy_http_version 1.1;
proxy_read_timeout 86400s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Este proxy procesa cualquier solicitud HTTP y también hace que los websockets funcionen para todo el espacio de nombres. La razón por la que funciona es porque $http_upgrade
está vacío para solicitudes que no son de websocket.