Haga que NGINX actualice automáticamente las conexiones websocket en proxy inverso

Haga que NGINX actualice automáticamente las conexiones websocket en proxy inverso

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 Upgradey solo Connectionsi 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 Upgradeencabezado.

Entonces, en lugar de agregar Locationuna 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_upgradeestá vacío para solicitudes que no son de websocket.

información relacionada