配置 WebSocket 反向代理

nginx 反向代理 WebSocket 的话,需要明确地添加UpgradeConnection头:

# 如果没有Upgrade头,则$connection_upgrade为close,否则为upgrade
map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
} 
# 如果有多个后端服务器,则可以使用 upstream 定义多个后端服务器,并在 location 中使用 proxy_pass 指定后端服务器即可:
upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000;
} 
 
server { 
	listen 20038; 
	location /{ 
		proxy_http_version 1.1; 
		proxy_pass <http://wsbackend>; 
		proxy_redirect off; 
		proxy_set_header Host $host; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_read_timeout 3600s; 
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		proxy_set_header Upgrade $http_upgrade; 
		proxy_set_header Connection $connection_upgrade; 
	} 
}

WSS表示WebSocket + Https

map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
} 
upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000; 
} 
server{
	listen 20038 ssl;
	server_name localhost;
	ssl_certificate    /usr/local/nginx-1.17.8/conf/keys/binghe.com.pem;
	ssl_certificate_key /usr/local/nginx-1.17.8/conf/keys/binghe.com.key;
	ssl_session_timeout 20m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;
	ssl_verify_client off;
	location /{
	  proxy_http_version 1.1;
	  proxy_pass <http://wsbackend>;
	  proxy_redirect off; 
	  proxy_set_header Host $host; 
	  proxy_set_header X-Real-IP $remote_addr; 
	  proxy_read_timeout 3600s; 
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
	  proxy_set_header Upgrade $http_upgrade; 
	  proxy_set_header Connection $connection_upgrade; 
	}
}

https://tutorials.tinkink.net/zh-hans/nginx/nginx-websocket-reverse-proxy.html

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/access-the-websocket-service-in-the-cluster-through-nginx-ingress

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/comparison-among-nginx-ingresses-alb-ingresses-and-mse-ingresses-1?spm=a2c4g.11186623.0.0.663b2c51y4CMvm