后端用workerman(GatewayWorker)分別建立了一個ws和text協(xié)議的即時通訊服務(wù),不用NGINX轉(zhuǎn)發(fā)、直接使用IP訪問時,ws協(xié)議和text協(xié)議均能正常和客戶端通信;使用NGINX反向代理時,ws協(xié)議能正常和客戶端通信,但text協(xié)議和客戶端始終無法通信,客戶端始終收不到數(shù)據(jù)。
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也是上面通用代碼,只是端口不同。
操作系統(tǒng):centos7
Workerman version:4.0.27
拜托哪位大神幫忙解釋下是怎么回事,調(diào)試了很久了,急!
text
協(xié)議是基于 TCP
的純文本協(xié)議,它沒有像 HTTP
或 WebSocket
那樣在應(yīng)用層封裝額外的協(xié)議頭或幀結(jié)構(gòu)。因此,Nginx
無法通過 http
塊來處理這種協(xié)議,而是需要通過 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;
}
}