[Unraid 系列 v6.10+] 3 NGINX 反向代理 UNRAID webterminal 实现刷新异常处理

说明

我发现 Nginx 反向代理 Unraid 后,每分钟 webterminal/ttyd/ 都会刷新一次,此前所有有关行为和显示都将清空。

原因

后来经过 Chrome 的 DevTools 检查查看 Network 项,发现:

  • 每一分钟, webterminal/ttyd/ 都会向 ws 发出一次 upgrade GET 请求。返回结果为 101 Switching Protocols 更新成功,并重新生成一次 token 。

但是未经 Nginx 反向代理都没有问题,可以肯定是 Nginx 代理出现问题。

然后检查 Console 项,发现一直是以下 7 行循环显示:

复制(index):1 [ttyd] websocket connection opened
(index):1 [ttyd] WebGL renderer enabled
(index):1 [ttyd] Leave site alert disabled
(index):1 [ttyd] option: theme=[object Object]
(index):1 [ttyd] option: fontSize=15
(index):1 [ttyd] option: fontFamily=monospace
(index):1 [ttyd] websocket connection closed with code: 1006

其中, websocket connection closed with code: 1006 引起了我的注意,确定是 WebSocket 连接关闭了,代码是 1006 。就直接到网上去搜,找到: Nginx代理WebSocket方法

“默认情况下,如果代理服务器在 60 秒内没有传输任何数据,连接将被关闭。可以使用 proxy_read_timeout 指令增加此超时。”

处理

既然 proxy_read_timeout 默认为 60 ,而发送心跳数据被不在 webterminal/ttyd/ 源码内部,保险起见不去更改系统文件。

就单独设置为 20 分钟无数据输入再进行连接中断: proxy_read_timeout 20m;

示例:

复制server {
    listen [PORT] ssl http2;
    server_name  [DOMAIN];

    ssl on;
    root html;
    index index.html index.htm;
    # ssl ......

   location / {
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass https://[DOMAIN]:[PORT];
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 20m;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

作者:Yogile

出处:https://www.cnblogs.com/Yogile/p/17234491.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Yogile  阅读(458)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题