背景,nginx转发websocket在本地跟其它测试环境连接都正常,但同样的配置,在某测试环境突然连接失败,报400异常。
failed: Error during WebSocket handshake: Unexpected response code: 400
经推断,问题还是出现在nginx转发上。
原来的nginx websokcet配置如下,跟大部分网上说的一样,只有核心的几句配置,可某测试环境就是不行
location ~ /websocket/ {
proxy_pass http://192.168.3.249:9090;
proxy_http_version 1.1;
proxy_set_header X-Client-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
后查询得知,nginx websokcet 配置出了核心的这几个配置外,还有其它配置的,然后给补上,刷新测试,果然可以了。配置如下
location ~ /websocket/ {
proxy_pass http://host_ip:9090;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header X-Client-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_read_timeout 600;
}
其中proxy_connect_timeout 、proxy_read_timeout 属性给配置上,时间给加长点儿,原先只有30还是不行,猜测可能网络问题导致连接时间稍长,超过了默认的30就直接报400了
网友评论