nginx默认等待连接的超时时间为60s,我们可以通过修改下面参数来延长连接时间proxy_connect_timeout;

下面是具体配置中

http {
    server {
        location /club/websocket {
            root   html;
            index  index.html index.htm;
            proxy_pass http://club/websocket; 

            proxy_http_version 1.1; #webSocket的默认连接配置
            proxy_set_header Upgrade $http_upgrade; #webSocket的默认连接配置
            proxy_set_header Connection "Upgrade"; #webSocket的默认连接配置

            proxy_connect_timeout 75s; #配置点1,与后端服务器建立连接的超时时间。一般不大于75秒;
            proxy_read_timeout 600s; #配置点2,如果没效,可以考虑这个时间配置长一点
            proxy_send_timeout 60s; #配置点3

            # 反向代理透传客户端ip
            proxy_set_header X-Real-IP $remote_addr;  #远端真实地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #反向代理之后转发之前的ip地址
            proxy_set_header Host $http_host;     # http请求的主机域名
            proxy_set_header X-NginX-Proxy true;   #nginx代理
        }
    }
}

配置解析:

  • proxy_http_version 1.1;:WebSocket 必须通过 HTTP/1.1 协议建立连接。如果你没有这条配置,Nginx 会默认使用 HTTP/1.0 协议,这会导致 WebSocket 连接失败。

  • proxy_set_header Upgrade $http_upgrade;:WebSocket 在连接时会发送一个 Upgrade 请求头,表示希望从 HTTP 协议升级到 WebSocket 协议。Nginx 必须转发这个头部。

  • proxy_set_header Connection 'upgrade';:这表示要保持连接并升级为 WebSocket 协议。如果没有这个配置,Nginx 可能就会中断连接,导致连接无法建立。