当前位置: 首页 > 面试题库 >

WebSocket连接失败,nginx,nodejs和socket.io

孙元明
2023-03-14
问题内容

我尝试使用nginx设置nodejs。但是当客户端尝试连接时,它将失败并显示…

WebSocket connection to 'ws://www.mydomain.com/socket.io/1/websocket/KUv5G...' failed: Error during WebSocket handshake: 'Connection' header value is not 'Upgrade': keep-alive socket.io.js:2371

那么如何启用websocket通信呢?

我目前的Nginx配置

  upstream mynodejsapp {
    server 127.0.0.1:3000 max_fails=0 fail_timeout=10s weight=1;
    ip_hash;
    keepalive 512;
  }
  server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    index index.html;
    server_name mydomain.com www.mydomain.com;
    keepalive_timeout 10;
    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    location / {    
      proxy_pass http://mynodejsapp;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_set_header X-NginX-Proxy true;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_cache_bypass $http_upgrade;
      proxy_http_version 1.1;
      proxy_redirect off;
      proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
      proxy_connect_timeout 5s;
      proxy_read_timeout 20s;
      proxy_send_timeout 20s;
      proxy_buffers 8 32k;
      proxy_buffer_size 64k;
    }
    location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
      root /var/www/mynodejsapp;
      access_log off;
      expires 1h;
    }
    fastcgi_param   APPLICATION_ENV  production; 
  }

问题答案:

首先,将您的nginx服务器升级到1.3或更高版本。

其次,我的nginx conf有效。您可以关注我的conf。

server {
    listen       80;
    server_name jn.whattoc.com;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://127.0.0.1:4050/;
      proxy_redirect off;

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


 类似资料:
  • 错误:无法启动连接:错误:WebSocket无法连接。在服务器上找不到连接,endpoint可能不是信号器endpoint,服务器上不存在连接ID,或者存在阻止WebSocket的代理。如果有多台服务器,请检查是否启用了粘性会话。 WebSocketTransport.js:49WebSocket连接到“ws://xxxxxx/生产/网络服务/集线器/spreadhub”失败: Angular.t

  • 我希望构建一个节点应用程序,将实现以下目标: null

  • 我正在使用套接字。io,应用程序由AWS提供。我收到一个浏览器控制台错误: websocket.js:54 WebSocket 连接到 'wss://www.tidee.com/socket.io/?EIO=4 客户代码: 服务器代码: 在 AWS 中,安全组接受端口 443,负载均衡器侦听端口 443。 应用程序在本地运行时工作(状态 101),并使用 协议。

  • 我知道,这个问题已经在不同的论坛上被问了很多次,但我仍然无法找到一个解决方案,这解决了我的问题...情况:我们在服务器上有一个nginx、php-fpm和MySQL堆栈。服务器位于nginx反向代理之后。问题是,在上游服务器上有干净的错误日志,而在反向代理上,我得到了多条消息 连接到>上游,客户端:+++++++++++,服务器:domain.com,请求:“Get>/files/imagecac

  • 使用 jar 包 , 连接 websocket, 用域名的方式连接失败, 中间有通过 nginx 转发 用浏览器的控制台 new Websocket(wss://域名) 已经成功 nginx 配置正常的 , 用于 websocket 的配置添加了 使用 ws://域名 方式报 400 错误 用 wss://域名 方式 nginx 连请求都没收到 域名是买的, 是能通过验证的 使用 http 直接连

  • 问题内容: 我使用NodeJS创建了一个应用程序,并且正在使用ws模块。如果我在本地主机上测试该应用程序,则它可以正常工作,并且连接websockets没有任何问题。现在,我已将应用程序上载到Openshift,当我尝试从客户端访问该应用程序时,它返回,这无法建立与Websocket的连接。 如果我在应用程序中拖入腻子, 则会收到 以下消息: 调试:这种类型的响应一定不能有主体。 忽略传递给end