关于 Docker 安装 v3.1.0 思源笔记基于 nginx 使用反向代理二级域名出错问题的反馈和讨论

各位贤达,大家好。

我刚开始使用思源笔记。

环境情况说明

VPS-UBUNTU

DOCKER 安装思源笔记。域名:http://www.B.C.N 子域名:http://dd.B.C.N

思源笔记版本:v3.1.0 思源笔记端口映射到 7777。

http://www.B.C.N:7777 能正常访问思源笔记,且使用多天无问题。

问题

今天使用 nginx 设置反向代理,设置如下:

server {  
    listen 80;  
    server_name dd.B.C.N;
  
    location / {  
        proxy_pass http://127.0.0.1:7777;
    }
}

现象

http://www.B.C.N:7777 能正常访问思源笔记,正常使用。

http://dd.B.C.N 能正常访问,使用授权码登陆之后,网页客户端出现以下问题。


1111.png

后台服务器显示以下代码


linux

ddsy_c | E 2024/07/29 22:43:03 serve.go:452: handle command failed: websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header
ddsy_c | E 2024/07/29 22:43:04 serve.go:452: handle command failed: websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header

我的处理和实验

我将 ddsy_c 这个 docker 容器删除。重新寻找一个目录,docker 安装思源笔记。

再次实验二级域名访问思源笔记。

故障已经能够复现。

请教

各位贤达高手,请看看是什么问题?怎么解决?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22337 引用 • 89378 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • muxue 1 1 评论

    在你的 nginx server 配置项里面追加如下配置,加在 location / 之前。这个是反代 ws 的配置项。

    location /ws {
        proxy_pass http://127.0.0.1:7777;
        proxy_read_timeout 60s;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'Upgrade';
    }
    

    修改完毕后应该如下(缩进乱了)

    server {  
        listen 80;  
        server_name dd.B.C.N;
      
    location /ws {
        proxy_pass http://127.0.0.1:7777;
        proxy_read_timeout 60s;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'Upgrade';
    }
        location / {  
            proxy_pass http://127.0.0.1:7777;
        }
    }
    
    

    思源报告的这个错误含义是,/ws 路径应该通过 websocket 协议访问,当你直接访问端口的时候,思源会给客户端发送 connection upgrade 并自动提升为 websocket 协议,此时客户端发回的请求里面也应该包括这个字段;但是当你反代了之后,客户端返回的 connection upgrade 协议头被 nginx 给卡掉了,思源没有收到这个消息,也就无法正常升级为 websocket 协议,于是就报错了。

    另外,如果 nginx 版本较高,似乎不需要反代 ws 也不会出现此问题(比如我在 1panel 里面安装的 openrestry 在没有配置 ws 反代之前也没有遇到过这个错误,虽然我还是配置了)

    1 回复
    专业!可靠!
    sunyanghua
  • 其他回帖
  • daziduan
    作者
    2024/07/30 09:09:57 http: response.Write on hijacked connection from github.com/gin-gonic/gin.(*responseWriter).Write (response_writer.go:83)
    

    有人能看懂 docker 思源笔记后台的这条记录是什么意思吗?

    hijack??

  • muxue 1 赞同
    1. 思源用户指南里面关于 docker 伺服部分的教程有提到 nginx 反代 /ws 的问题,而且也是社区最多人问的问题。
    2. 这是计算机网络的专业知识,如果想学得系统性的学习计算机网络。因为我是计算机专业的学生,所以我懂这个。
  • 反代还要反代那个 websocket

    2 回复
  • 查看全部回帖