无效的WebSocket升级

1 投票
1 回答
25 浏览
提问于 2025-04-12 15:03

我在一个VPS上用NiceGUI和Nginx搭建了一个服务器。请求是通过一个子域名发过来的,并且路由设置得很好:服务器接收到请求后能正确打印出HTML元素。

但是,当我使用websockets时,服务器输出出现了以下错误信息:ERROR:engineio.server:Invalid websocket upgrade (further occurrences of this error will be logged with level INFO)

同时,我的浏览器显示:manager.js:108 WebSocket connection to 'wss://{我隐藏了这个}/_nicegui_ws/socket.io/?client_id=ce259c07-9781-4739-9faa-051f24e911bd&EIO=4&transport=websocket' failed

同样的设置在on_air运行得很好

这是我为子域名设置的nginx配置:

server {
    listen 80;
    server_name {I-hid-this};

    location / {
        proxy_pass http://127.0.0.1:8080;
        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 X-Forwarded-Proto $scheme;
    }
}
server{
        # SSL configuration
        listen 443 ssl;
        server_name {I-hid-this};
        ssl_certificate /etc/nginx/ssl/{I-hid-this}_ssl_certificate.cer;
        ssl_certificate_key /etc/nginx/ssl/_.{I-hid-this}_private_key.key;

        location / {
                proxy_pass http://127.0.0.1:8080;
                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 X-Forwarded-Proto $scheme;
        }

}

我尝试在额外的端口上添加sockets,但没有任何变化。

我现在面临的主要问题是找不到关于这个错误的具体文档。

更新:我记录了接收到的头信息,发现transport被设置为websocket,但没有传递HTTP_UPGRADE,这正是导致问题的原因。此外,我本地的工作服务器接收到的是ws作为协议,而我的VPS则接收到https。希望这能有所帮助。

1 个回答

1

我通过在我的nginx配置文件中添加以下设置来解决了这个问题:

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

感谢这个来源:https://www.nginx.com/blog/websocket-nginx/

撰写回答