引用
由于现在大多数项目都是前后分离开发的,很多时候都不是直接对后端项目进行请求,而且经过了Nginx代理转发请求。
Nginx常规的代理转发配置是不支持websocket协议的。
本节主要介绍如何让Nginx代理支持websocket协议。
原因:
公网ip经过nginx代理,nginx代理默认不支持长连接,而wobsocket是基于长连接实现的。
由于“Upgrade”是 hop-by-hop 标头,因此它不会从客户端传递到代理服务器。使用正向代理,客户端可以使用该CONNECT 方法来规避此问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。
解决方法:
如上所述,包括“Upgrade”和“Connection”在内的hop-by-hop标头不会从客户端传递到代理服务器,因此为了让代理服务器了解客户端将协议切换到 WebSocket 的意图,这些标头必须明确传递:
http {
upstream gateway {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
location /chat/ {
proxy_pass http://gateway;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
一个更复杂的示例&#