nginx 中根据 $http_upgrade 变量将 HTTP 连接升级为 WebSocket 连接

发布时间 2023-07-18 18:30:22作者: walkersss

配置 “$connection_upgrade” 变量

连接升级通常与 WebSockets 结合使用。 在 nginx 中,我们可以根据 $http_upgrade 变量将 HTTP 连接升级为 WebSocket 连接。

我们可以使用 map 块在 nginx 中定义连接和 http 升级之间的依赖关系:

vim nginx.conf

map $http_upgrade $connection_upgrade {
        default upgrade;
        '  '       close;
       }
如果 Upgrade 标头设置为 ‘’,此 map 块告诉 nginx 正确设置相关的 Connection 标头来关闭连接。
将 map 块放入 nginx 配置的 http 块中。 nginx 配置的默认文件路径是 /etc/nginx/nginx.conf 。
————————————————
cat   abcd.hkml.com.conf

map $http_upgrade $connection_upgrade {
  default upgrade;
  '  '       close;
        }

server {
  listen 443 ;

  server_name abcd.hkml.com;

  ssl_certificate /etc/nginx/ssl/abcd.hkml.com.pem;
  ssl_certificate_key /etc/nginx/ssl/abcd.hkml.com.key;
  #ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;

  location ~^/webSocket{
    proxy_pass http://172.1.1.10:9099;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_read_timeout 3600s;
    proxy_connect_timeout 86400;
    proxy_ignore_client_abort on;
    }

  }