nginx反向代理text协议时收不到数据

caifu_yang

问题描述

后端用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也是上面通用代码,只是端口不同。

操作系统环境及workerman/webman等具体版本

操作系统:centos7
Workerman version:4.0.27

拜托哪位大神帮忙解释下是怎么回事,调试了很久了,急!

162 1 0
1个回答

北月

text 协议是基于 TCP 的纯文本协议,它没有像 HTTPWebSocket 那样在应用层封装额外的协议头或帧结构。因此,Nginx 无法通过 http 块来处理这种协议,而是需要通过 stream 块来直接代理原始的 TCP 流量。也就是说这部分配置需要写到 stream 块里面。

stream {
    upstream wk_text_server {
        server 127.0.0.1:1234;
    }
    server {
        listen 2030;
        proxy_pass wk_text_server;
        proxy_timeout 300s;
        proxy_connect_timeout 5s;
    }
}
  • caifu_yang 2025-02-28

    实测可用,问题已解决,非常感谢!!

×
🔝