Nginx反向代理Websocket

简介

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配置的问题,在此记录下解决方案。

参考

点赞