socket.io客户端持续发送WebSocket connection to 'wss://网址/socket.io/?EIO=4&transport=websocket' failed: ?

客户端持续发送:websocket.js:54 WebSocket connection to 'wss://www.xiaoyangst.top:8443/socket.io/?EIO=4&transport=websocket' failed:

image.png

我在nginx这边如何代理呢?

root@xy:/etc/nginx# cat nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {


    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server{
        listen 443 ssl;
        server_name www.xiaoyangst.top;
        ssl_certificate /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_cert_chain.pem;
        ssl_certificate_key /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_key.key;

                root /home/xyst/XrtcDemo/myapp/build;
                index index.html;
                location / {
                        try_files $uri %uri/ /index.html;
                }

                location /api {
                         proxy_pass https://www.xiaoyangst.top:8443;
             proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                         proxy_set_header X-NginX-Proxy    true;
                         proxy_set_header X-Real-IP $remote_addr;
                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                         proxy_set_header X-Forwarded-Proto $scheme;
                 }

        location /socket.io {
             proxy_pass https://www.xiaoyangst.top:8443;
                   proxy_redirect     off;
                   proxy_set_header   Host $host;
                   proxy_set_header   X-Real-IP $remote_addr;
                   proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                   proxy_set_header   Upgrade $http_upgrade;
                   proxy_set_header   Connection "upgrade";
        }

    
    }



    

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
}

我觉得是后端没有接受到客户端建立连接的请求,即连接socket.io服务器

应该如何处理

补充:后端socket.io服务器无法处理这个网址,当我通过app.get来处理这个连接发现就可以

image.png
但问题是,这样并不能连接到我的socket.io服务器,否则我怎么和客户端的socket.io通信呢?

阅读 866
avatarAI BotBETA

你的假设可能是正确的,后端可能没有正确地处理来自客户端的WebSocket连接请求。然而,这个问题可能由多种原因引起,包括但不限于:

  1. 后端服务器没有正确配置以接受WebSocket连接。
  2. Nginx没有正确地将WebSocket连接请求代理到后端服务器。
  3. 防火墙或安全组设置阻止了WebSocket连接。

首先,你需要确保你的后端服务器(在这个情况下是运行在www.xiaoyangst.top:8443的服务器)已经正确配置以接受WebSocket连接。这可能涉及到检查你的后端服务器代码,以及任何相关的WebSocket或socket.io配置。

其次,你需要检查Nginx的配置,确保它正确地代理了WebSocket连接。你的Nginx配置看起来已经包含了必要的设置,如proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";,这些设置是必需的,以便Nginx可以将WebSocket连接请求升级到WebSocket协议。

然而,请注意,你的location /socket.io块中的proxy_pass指令指向的是HTTPS协议,而WebSocket连接通常使用WSS(WebSocket Secure)协议。这可能会导致问题,因为Nginx可能无法正确地将WebSocket连接请求代理到后端服务器。你应该尝试将proxy_pass指令更改为使用WSS协议,如下所示:

location /socket.io {
    proxy_pass wss://www.xiaoyangst.top:8443;
    proxy_redirect     off;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection "upgrade";
}

如果更改后问题仍然存在,你可能需要进一步检查后端服务器的日志,以查看是否有任何有关未处理的WebSocket连接请求的错误或警告。此外,你也可能需要检查你的防火墙或安全组设置,以确保它们没有阻止WebSocket连接。

最后,你的假设也可能是错误的,问题可能并不在于后端服务器没有接受到连接请求,而是由于其他原因,如证书问题、CORS策略等导致的连接失败。因此,如果上述建议都不能解决问题,你可能需要更详细地调查问题的原因。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题