简介
Websocket协议提供了一种方式可以让客户端与服务器相互通信,现代很多浏览器都支持Websocket,后端的很多开发框架也大多支持Websocket。在生产环境中,经常需要用到Nginx作为反向代理,有时候需要代理后端的Websocket服务。
我们对Nginx进行一些配置,才能支持后端的Websocket。
具体配置
1、直接配置
location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
2、更稳定的配置
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { ... location /chat/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }
默认情况下,60s之内,代理服务器未发送任何数据的话连接会被关闭。我们可以设置 proxy_read_timeout 指令,来进行调整。
小结
前段时间在使用Websocket的时候,后端使用的Spring Boot,在本地开发不会报任何错,放到生产环境上,生产环境使用Nginx做反向代理,会提示不支持的Websocket版本。则猜想到应该是Nginx配置的问题,在此记录下解决方案。