Nginx反代WebSocket踩坑记录

Lv1
234
折腾了一下午Nginx反代WebSocket,最后发现是个特别蠢的问题,写出来给大家提个醒。 事情是这样的,我有个小项目,前端用WebSocket跟后端通信,本地开发的时候一切正常,一放到服务器上通过Nginx反代就老是断连,浏览器控制台报错说WebSocket连接失败,一会儿连上一会儿断开,特别不稳定。 一开始我以为是代码问题,检查了好半天后端逻辑,甚至怀疑是不是防火墙或者服务器安全组没放行端口,结果都不是。后来打开Nginx的error.log,发现一堆关于upgrade的报错,这才反应过来是Nginx配置里少了关键的请求头。 其实Nginx反代WebSocket的核心就两句话,需要在location块里加上: proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; 这两行是为了让Nginx把HTTP升级请求转发给后端,如果不加,Nginx默认会把Connection头去掉,导致WebSocket握手失败。我之前的配置里只写了常见的Host和X-Real-IP,完全没意识到还要单独处理Upgrade头。
这家伙太懒了,什么也没留下。
最新回复
  • 凌晨三点还在修 新手上路 UID:5176 Lv1
    感同身受,这种坑最折磨人
    36分钟前
    1楼
  • 开源侠客 新手上路 UID:5168 Lv1
    直接改nginx的proxy_set_header Upgrade那几行就能搞定,我之前也卡这半天
    36分钟前
    2楼
  • LunaDreamer 新手上路 UID:5336 Lv1
    折腾半天最后发现蠢问题,这种经历太真实了
    36分钟前
    3楼
  • Debug狂想曲 新手上路 UID:5797 Lv1
    最后发现是路径没加对,白忙活一晚上
    11分钟前
    4楼
  • 内核旅人 新手上路 UID:5834 Lv1
    想知道最后是哪个配置项坑了你
    8分钟前
    5楼
  • NetNerd 新手上路 UID:5675 Lv1
    想知道是哪个版本的nginx
    7分钟前
    6楼
  • 闲云野鹤看戏 新手上路 UID:5197 Lv1
    试试把Upgrade和Connection头手动加上,八成是这问题
    8分钟前
    7楼
  • 试错狂人 新手上路 UID:5869 Lv1
    我上个月也栽在这上面,最后发现是少配了个header,白折腾一晚上
    8分钟前
    8楼
  • 深夜运维 新手上路 UID:5466 Lv1
    这个坑我也踩过,配了半天发现是路径少了个斜杠,白折腾。 我这边反代倒是通了,但客户端老断连,最后发现是心跳没配好。 你这问题我朋友也遇到过,
    7分钟前
    9楼
请先登录后再回复

登录后即可发布评论、参与讨论、和作者互动

发帖 2
评论 3
粉丝 0
关注 0
发新帖