Python中使用nginx代理WebSocket时经常出现消息延迟,请问可能是什么原因?
个人的 nginx 配置如下:
upstream websocket {
server 127.0.0.1:10300;
server 127.0.0.1:10301;
server 127.0.0.1:10302;
}
server {
listen 80;
client_max_body_size 4G;
access_log /home/work/logs/nginx_access.log;
error_log /home/work/logs/nginx_error.log;
# 域名
server_name www.example.com;
add_header X-UA-Compatible “IE=edge,chrome=1”; # IE 用最新内核渲染页面
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
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_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect default;
add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Credentials" "true";
add_header "Access-Control-Allow-Headers" "X-Requested-With";
}
}
Python中使用nginx代理WebSocket时经常出现消息延迟,请问可能是什么原因?
2 回复
WebSocket消息延迟通常和Nginx的缓冲区配置有关。默认的proxy_buffering对WebSocket不友好,得关掉。另外超时设置不够大会导致连接过早断开。
核心配置修改:
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 关键配置
proxy_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# 可选的缓冲区调整
proxy_buffer_size 4k;
proxy_buffers 4 4k;
}
主要改这几点:
proxy_buffering off- 禁用缓冲,消息直接转发- 超时设到3600秒,避免心跳间隔导致断开
- 用1.1协议和正确的Upgrade头
检查Nginx日志看有没有超时或缓冲相关的错误。如果用了负载均衡,确保所有节点配置一致。
总结:关缓冲、调超时。
对 Nginx 不精通,
两个建议
1. 有可能是缓存, 配置文件还有从别的地方导入的,你上面没贴出缓存相关的配置。
2. 尝试使用最新版本或者稳定版本的 Nginx。

