nginx websocket 400 - 解决 nginx 反代 wss 出现的 400 错误

nginx websocket 400 - 我用 nginx 反代 socket.io 做推送的时候出现了这个问题,本文主要记录使用 socket.io 做推送并使用 nginx 反代,以及解决遇到的问题,比如这个 400 错误以及设置超时等。

至于 socket.io 的使用,我已经写过一篇文章了,请查看:使用 socket.io 给浏览器推送消息 ,当时还是在另一家公司做项目,最近在自己创业,做 也贝印品,当时需要在用户扫码支付完成后发送推送提示付款成功,自然用到了 socket.io 结果反代后提示 400 错误,以下是解决过程:

nginx websocket 400 的解决过程

首先,我看到了 nginx 官方的文档:WebSocket proxying ,按照文档的意思,首先,nginx 1.3.13 起才支持 websocket 这点我相信绝大部分人是满足的,毕竟,我使用的版本已经是 1.13.6.1 了,你可以尝试用 nginx -v 查看版本信息。

接着就是 nginx 的配置了,需要添加以下几行:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

而且默认是 60秒 超时,即服务端和客户端在60秒内没有数据交换时连接会被释放,官方的建议是 增大 proxy_read_timeout,比如设置为 proxy_read_timeout 180s;  则3分钟后才超时,官方的另一个建议是客户端和服务端发送ping 去检测超时,这个 socket.io 同样支持。比如:

const io = require('socket.io')(server, {
    pingInterval: 10000,
});

则代表每 10 秒发送一次心跳检测,你可以根据需要增大。

本博客若无特殊说明则由 full-stack-trip 原创发布
转载请点名出处:全栈之旅 > nginx websocket 400 - 解决 nginx 反代 wss 出现的 400 错误
本文地址:https://www.kpromise.top/nginx-websocket-400/

发表评论

电子邮件地址不会被公开。 必填项已用*标注