场景:多C环境常配置nginx做负载均衡,此时大多数会出现移动端app访问连接不上,但是移动端浏览器可以正常访问的情况,其解决方法如下,在nginx.conf中添加如下配置: location /websocket { proxy_pass XXX; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } 注意:proxy_pass 后面为咱们app的访问地址。 WebSocket
和 HTTP 协议不同,但是 WebSocket 中的握手和 HTTP 中的握手兼容,它使用 HTTP 中的 Upgrade 协议头将连接从
HTTP 升级到 WebSocket,当客户端发过来一个 Connection: Upgrade请求头时,Nginx 是不知道的,所以,当
Nginx 代理服务器拦截到一个客户端发来的 Upgrade 请求时,需要显式来设置Connection 、Upgrade 头信息,并使用
101(交换协议)返回响应,在客户端和代理服务器、后端服务器之间建立隧道来支持 WebSocket。 |