[nginx] Proxy WebSocket

Función: convierte la conexión entre el cliente y el servidor de HTTP/1.1 a WebSocket.
Sin embargo, vale la pena señalar que: "Actualizar" es un encabezado de salto por salto (hop-by-hop), que no se puede pasar desde el cliente al servidor proxy. Usando un proxy de reenvío, los clientes pueden usar el método CONNECT para sortear este problema. Sin embargo, el uso de un proxy inverso no funciona porque el cliente no conoce el servidor proxy y requiere un manejo especial en el servidor proxy.
A partir de la versión 1.3.13, nginx implementa un modo de operación especial, si el servidor proxy devuelve una respuesta con el código 101 (protocolo de intercambio) y el cliente solicita el cambio de protocolo a través del encabezado "Actualizar" en la solicitud, se abre un túnel. permitido entre el cliente y el servidor proxy.

Como se mencionó anteriormente, "Actualización" y "Conexión" no se pasan del cliente al servidor proxy, por lo que para que el servidor proxy conozca la intención del cliente de cambiar el protocolo a WebSocket, estos encabezados deben pasarse explícitamente:

location /chat/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Un ejemplo más complejo, donde el valor del campo de encabezado "Conexión" en una solicitud a un servidor proxy depende de la presencia del campo "Actualizar" en el encabezado de solicitud del cliente:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    server {
        ...
        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }

De forma predeterminada, si el servidor proxy no transmite ningún dato durante 60 segundos, la conexión se cerrará. Este tiempo de espera se puede aumentar con la directiva proxy_read_timeout. Alternativamente, el servidor proxy se puede configurar para enviar periódicamente marcos de ping de WebSocket para restablecer el tiempo de espera y comprobar que la conexión sigue activa.

nginx proxy ws y wss, con archivo de configuración completo + herramienta de prueba en línea WebSocket: http://wstool.js.org/

servidor proxy

#user  nobody;
worker_processes 4;

events {
     worker_connections 1024;
}

http {
    map $http_upgrade $connection_upgrade{
            default upgrade;
            `` close;
    }

    server{
     
        listen 8020;
        location / {
                proxy_pass http://192.168.2.135:5001;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "Upgrade";
        }
    } 

}


Use ws://ip:8020 cuando se conecte

Supongo que te gusta

Origin blog.csdn.net/weixin_35804181/article/details/130385410
Recomendado
Clasificación