后端用workerman(GatewayWorker)分别建立了一个ws和text协议的即时通讯服务,不用NGINX转发、直接使用IP访问时,ws协议和text协议均能正常和客户端通信;使用NGINX反向代理时,ws协议能正常和客户端通信,但text协议和客户端始终无法通信,客户端始终收不到数据。
nginx反向代理配置代码:
location /
{
proxy_pass http://192.168.*.*:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
}
说明:nginx反向代理ws也是上面通用代码,只是端口不同。
操作系统:centos7
Workerman version:4.0.27
拜托哪位大神帮忙解释下是怎么回事,调试了很久了,急!
text
协议是基于TCP
的纯文本协议,它没有像HTTP
或WebSocket
那样在应用层封装额外的协议头或帧结构。因此,Nginx
无法通过http
块来处理这种协议,而是需要通过stream
块来直接代理原始的TCP
流量。也就是说这部分配置需要写到stream
块里面。实测可用,问题已解决,非常感谢!!