Nginx代理WebSocket响应403或者显示 已完成

nginx代理websocket 经常有奇怪的情况,遇到一个项目的nginx配置的,拷贝过去,在另外一个项目就是代理不成功,不生效,经过研究,总结下经验

1、在nginx.conf 配置文件中的 http 模块中添加一下

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

2、在server模块下的 需要代理的 location 下面添加一下

location / { 
proxy_pass http://192.168.1.100; 
proxy_http_version 1.1; 
proxy_read_timeout 800s; 
proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade"; 
proxy_set_header Origin ""; 
proxy_set_header Host $http_host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

3、总结

其中第一步,测试发现部分不加这段 配置也可以正常代理websocket,建议加一下
第二步中的5、6、7行尤为最重要
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
这两行必加
Origin 这行实践中也是部分不加上也可以,但是部分不加上怎么都不行,要么显示403 要么显示 websocket 已完成 状态,并非正常的101 状态。
其他的可以按照是实际情况添加。

Momostudent
Momostudent
因为喜欢所以折腾。。。