关于 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 安装思源笔记。

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

故障已经能够复现。

请教

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

  • 思源笔记

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

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

    20519 引用 • 80010 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 反代还要反代那个 websocket

    2 回复
  • daziduan
    作者

    你好。

    我没有反代 websocket ,(也不懂怎么 websocket)。

    另外我详细点描述一下问题

    我尝试删除 docker 思源笔记。再次安装。直接用主域名:7777 可正常访问,后台也没问题。

    一旦我使用二级域名,便会出现下面问题(有 websocket 等关键词)

    linux

    ddsy_c | E 2024/07/29 23:14:05 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 23:14:06 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 23:14:08 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 23:14:10 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 23:14:12 serve.go:452: handle command failed: websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header

    我觉得可能是二级域名哪里设置的问题?有人碰到过吗?

  • visduo

    6806 端口号自己改掉

    location /ws {
        proxy_pass http://127.0.0.1:6806;
        proxy_read_timeout 60s;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'Upgrade';
    }
    
    
    1 回复
  • muxue 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
    作者

    @muxue


    👍


    按照你的方案,解决问题了。


    按照服务端的出错提示,我也能得出没有使用 websocket 协议,在连接头中没有发现“upgrade”“token”。

    你是怎么想出解决方案的?我该看些哪方面的学习资料?

    请指教。

    🙏

    1 回复
  • daziduan
    作者

    👍

  • dorn

    老哥说的没毛病,我也带了 websocket。

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

  • laputa-d

    1panel OpenResty 网页服务,开反向代理,https

    文件内容修改不了请问有遇到过吗?之前可以正常使用,昨天登陆后发现无法保存文档内容,右上角弹出信息无内容(如图)

    image.png

    新建笔记和标题都可以保存,输入内容就会有上边的弹窗,刷新页面后文件编辑的内容消失(文章标题可以正常保存)

    看 OpenResty 好像有关于 /api/transactions API 调用,但都被拒绝(状态码 403),不太懂是不是跟这个有关系

    现在发现是与 WAF 设置有关系,1panel 关闭 WAF 可以解决上边的问题

    1 操作
    laputa-d 在 2024-08-02 13:34:50 更新了该回帖
请输入回帖内容 ...