zoukankan      html  css  js  c++  java
  • nginx下配置WebSocket连接错误Error:Unexpected response code 404

    起因是今天刚部署项目的时候小伙伴反应websocket连不上了,但是这个项目部署在其他服务器下是ok的,莫非玄学?也可能是缺什么东西

    先wscat连接检查一下

    显示连接Error:Unexpected response code 404

    由于网络环境是内网,所以看下是不是网络问题,用ip+端口测试访问正常,那么我们可以断定是Nginx代理配置方面的问题

    我的conf结构为:

    server{
        listen  80;
        server_name 1.test.com;
         location /  {
            proxy_pass http://127.0.0.1:8888; 
         }
     }
    

    查了一下有关websocket的nginx官方相关文档:http://nginx.org/en/docs/http/websocket.html

    大概的意思是为了让升级的服务器了解客户端将协议切换到 WebSocket 的意图,必须明确传递这些标题

    默认情况下,如果预接的服务器在 60 秒内不传输任何数据,则连接将关闭。此超时可以通过proxy_read_timeout指令增加。或者,可以配置已增殖的服务器,定期发送 WebSocket ping 帧来重置超时并检查连接是否仍然有效。

    那么我们添加一下配置:

        location / {
         proxy_pass http://127.0.0.1:8888;
    
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
             
            proxy_connect_timeout 4s; 
            proxy_read_timeout 7200s; 
            proxy_send_timeout 12s;
    
            proxy_set_header    Host             $host;#保留代理之前的host
            proxy_set_header    X-Real-IP        $remote_addr;#保留代理之前的真实客户端ip
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;#在多级代理的情况下,记录每次代理之前的客户端真实ip
            proxy_set_header X-Forwarded-Proto $scheme; #表示客户端真实的协议(http还是https)
            proxy_redirect      default;#指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
    
        }
    

    reload一下,就可以成功连接咯,无视用同一张图,xixi

  • 相关阅读:
    win7下命令行添加系统服务
    java执行cmd命令
    grails-BuildConfig.groovy中grails.war.resources
    密码学
    Grails框架优劣势
    groovy+idea+Maven项目加载自身jar包
    cmd查看我的电脑盘符和文件
    MySQL insert插入
    MySQL截取字符串函数方法
    mysql 替换语句
  • 原文地址:https://www.cnblogs.com/shook/p/14962556.html
Copyright © 2011-2022 走看看