服务器上的niceGUI通过nginx反向代理,无法下载文件解决方法
当这个升级请求被Nginx拦截但未正确传递给后端服务时,后端服务可能无法正常完成WebSocket握手,进而影响依赖WebSocket通信的功能(比如你的下载按钮事件传递),并返回426状态码。访问niceGUI服务,点击下载按钮无反应,后台控制台也无报错信息,F12查看,发现报错:Error during WebSocket handshake: Unexpected response code
一、问题描述
访问niceGUI服务,点击下载按钮无反应,后台控制台也无报错信息,F12查看,发现报错:Error during WebSocket handshake: Unexpected response code: 426。
二、分析原因:
这个 426 Upgrade Required 错误,结合下载按钮无反应的现象,核心问题在于 Nginx没有正确转发WebSocket升级请求所需的头部信息。
-
WebSocket握手过程:NiceGUI这类现代Web框架通常依赖WebSocket进行实时通信。建立连接时,浏览器会发送一个包含
Upgrade: websocket头的HTTP请求,要求服务器将协议从HTTP升级为WebSocket。 -
Nginx的默认行为:默认配置下,Nginx不会转发
Upgrade和Connection这类特殊的hop-by-hop头部。当这个升级请求被Nginx拦截但未正确传递给后端服务时,后端服务可能无法正常完成WebSocket握手,进而影响依赖WebSocket通信的功能(比如你的下载按钮事件传递),并返回426状态码。
三,解决方法
1.修改nginx.conf配置文件
确保基础WebSocket支持,在 http { } 块内(通常在文件最顶部),确保有 map 指令来动态处理连接类型。如果还没有,请添加。通常默认在/etc/nginx目录下。
http {
# 定义WebSocket连接升级策略
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# ... 其他http块内的配置
}
2.修改反向代理的server配置块
server {
listen 80;
server_name your_server_domain_or_ip; # 你的服务器域名或IP
location / {
proxy_pass http://localhost:8080; # 请确认此处的端口与你的NiceGUI服务实际端口一致
# 核心修复:支持WebSocket协议升级
proxy_http_version 1.1; # 必须使用HTTP/1.1以支持协议升级[4,7](@ref)
proxy_set_header Upgrade $http_upgrade; # 转发Upgrade头
proxy_set_header Connection $connection_upgrade; # 动态设置Connection头
# 重要的基础代理头,确保后端获取真实客户端信息
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;
# 调整超时设置(可选,针对长连接稳定性)
proxy_read_timeout 300s; # 增加读取超时,避免长时间无数据交互断开[5,7](@ref)
proxy_send_timeout 300s;
}
}
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)