Websocket参数
博客简介
本文是针对 Websocket 请求在 Nginx 中的必要参数的一些配置说明
直接通过端口可连接,但是使用nginx转发后则需要进行相关配置,否则会报以下异常
QWebSocketPrivate::processHandshake: Unhandled http status code: 200 (OK).
一、解决方案
参考Nginx官方文档配置websocket:http://nginx.org/en/docs/http/websocket.html
location / {
proxy_pass http://119.28.180.116:9099;
// 这里三个选项是websocket配置配置的【直接复制即可】
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
二、举个栗子
server {
listen 8882;
server_name 192.168.50.229;
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.50.229:8082/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
警告
nginx进行websocket代理后,60s
未传输数据会被服务端断开连接
默认情况下,如果代理的服务器在60秒内没有传输任何数据,则连接将被关闭。这个超时可以通过 proxy read timeout
指令来增加 。
或者,代理服务器可以配置为定期发送WebSocket ping帧以重置超时并检查连接是否仍然存在。
1、proxy_connect_timeout:后端服务器连接的超时时间_发起握手等候响应超时时间(默认60秒)
2、proxy_read_timeout:连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
3、proxy_send_timeout:后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
PS:后端连接时间和后端回传时间使用默认的即可,但是等候后端服务器响应时间 proxy_read_timeout
需要改大一点,保持长链接状态。
三、最终配置版本
server {
listen 8882;
server_name 192.168.50.229;
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 86400s;
proxy_pass http://192.168.50.229:8082/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}