无效的WebSocket升级
我在一个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";