V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SgtPepper
V2EX  ›  问与答

为知笔记 docker 版开启 https 碰到问题,折磨 3 天了,求指点

  •  
  •   SgtPepper · 2022-11-26 00:05:11 +08:00 · 2339 次点击
    这是一个创建于 721 天前的主题,其中的信息可能已经有所发展或是发生改变。
    系统:rhel9.0|DockerCE v20.10.21|wiznote 最新镜像|nginx proxy manager v2.9.19

    官方教程地址:
    https://www.wiz.cn/docker-https
    https://www.wiz.cn/zh-cn/docker-https
    https://www.wiz.cn/zh-cn/introduction-docker-nas

    按照为知笔记 docker 官方教程安装容器然后配下 frpc 透传到腾讯云服务器,然用后域名访问 http 是没问题的( http://www.mydomain.com:60004

    但是根据教程搞 https 就一直失败,火狐访问提示“连接到 https://www.mydomaim.com:60004 时发生错误。SSL 接收到一个超出最大准许长度的记录。错误代码:SSL_ERROR_RX_RECORD_TOO_LONG”,用 edge 访问会提示“此站点的连接不安全 ERR_SSL_PROTOCOL_ERROR”。

    nginx proxy manger 配置如下:
    https://imgur.com/a/T72mpys

    npm 有参考过这篇: https://post.smzdm.com/p/akx47px4

    frpc 配置如下:
    [common]
    server_addr =
    server_port =
    token =
    log_file = /usr/local/bin/frp/frpc.log
    log_level = info
    log_max_days = 7

    [wiznote http]
    type = tcp
    local_ip = 192.168.1.14
    local_port = 8080
    remote_port = 60004

    做过以下排查:
    1.npm ssl 证书用的腾讯免费 ssl 证书,该证书在 wordpress 下工作正常
    2.安装普通 nginx ,不用 npm ,一样的报错

    被折磨 3 天了,实在没办法鸟。。。来求 v 友帮忙了
    13 条回复    2022-11-27 01:51:42 +08:00
    albertsteve11100
        1
    albertsteve11100  
       2022-11-26 02:58:18 +08:00 via Android
    https://gofrp.org/docs/examples/vhost-http/看下 frp 文档,是不是 frp 配置错了
    chinanala
        2
    chinanala  
       2022-11-26 03:06:09 +08:00   ❤️ 1
    我是在配置 HTTPS 站点反代 TTRSS 的 Docker 容器,也遇到过类似的 HTTPS 报错问题。解决方法是在 Nginx 的反代配置中赠加 2 行 HTTPS 配置(其它 HTTPS 反代配置继续保留),你可以参考下。如果本方案有用,还请及时回来更新结贴。

    proxy_set_header X-Forwarded-Ssl on;
    proxy_set_header X-Forwarded-Proto $scheme;
    totoro625
        3
    totoro625  
       2022-11-26 08:24:33 +08:00   ❤️ 1
    一定要用 nginx 的话,以下仅供参考:
    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;
    ssl_certificate /xxx.cer;
    ssl_certificate_key /xxx.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5:!EXP;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    location / {
    proxy_pass http://wiz:80;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header x-wiz-real-ip $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
    }

    另外可以用 frp 实现 SSL ,证书文件放在本地,不通过 nginx 加证书,以下是官方示例,只需映射到本地的 http 端口即可:
    [plugin_https2http]
    type = https
    custom_domains = test.yourdomain.com
    plugin = https2http
    plugin_local_addr = 127.0.0.1:80
    plugin_crt_path = ./server.crt
    plugin_key_path = ./server.key
    plugin_host_header_rewrite = 127.0.0.1
    plugin_header_X-From-Where = frp
    BugCry
        4
    BugCry  
       2022-11-26 10:23:27 +08:00 via Android
    套一个 Nginx proxy manager
    BugCry
        5
    BugCry  
       2022-11-26 10:28:48 +08:00 via Android
    @BugCry 不好意思,没看到你已经套了。根据你的配置来看,localport 可能需要改成 nginx proxy manager 自己的 https 端口,有可能是这个问题。另外,domains 可以设置为 ip 先测试
    SgtPepper
        6
    SgtPepper  
    OP
       2022-11-26 20:05:47 +08:00
    @chinanala 试了下没有用
    SgtPepper
        7
    SgtPepper  
    OP
       2022-11-26 20:26:57 +08:00
    @albertsteve11100 frp 应该没问题,我群晖上几个应用的 https 用同一套 frp 配法都 ok
    SgtPepper
        8
    SgtPepper  
    OP
       2022-11-26 20:28:32 +08:00
    @BugCry npm 就三个端口 80 443 81 ,你是指 npm 代理设置里面的 Forward Port 改成 443 ?
    SgtPepper
        9
    SgtPepper  
    OP
       2022-11-26 20:31:46 +08:00
    @totoro625 看了下,你给的配置就是我试 nginx 而不是 npm 的时候用的,不生效
    BugCry
        10
    BugCry  
       2022-11-26 23:37:13 +08:00 via Android   ❤️ 1
    @SgtPepper FRP(60004)->npm(443)->wiz(8080)
    SgtPepper
        11
    SgtPepper  
    OP
       2022-11-27 01:22:55 +08:00
    @BugCry
    还是不行啊老哥现在配置是这样的
    frp:
    [wiznote_http]
    type = tcp
    local_ip = 192.168.1.14
    local_port = 443
    remote_port = 60004

    npm
    Domain Names = www.mydomain.com
    Scheme = http
    Forward Hostname / IP = 192.168.1.14
    Forward Port = 8080

    你是这个意思不?
    目前 firefox 访问提示:连接到 www.mydomain.com:60004 时发生错误。PR_END_OF_FILE_ERROR
    SgtPepper
        12
    SgtPepper  
    OP
       2022-11-27 01:44:50 +08:00
    @BugCry 卧槽老哥牛逼,可以了!刚才不行是因为我 frpc 配置没生效,太感谢喽!真是离谱,我翻了那么多 npm 和 frp 教程愣是没人提到这个问题,其实仔细想想就明白了:npm 反代为知的 8080 http 口并配的 SSL ,那么 npm 监听的是 443 端口,所以 frpc 应该把 443 透传给轻量云的 fprs 。我之前在 frpc 透传的一直是为知的 8080 ,逻辑根本就错了。ORZ
    SgtPepper
        13
    SgtPepper  
    OP
       2022-11-27 01:51:42 +08:00
    唉 8080 改 443 的事情能卡 4 天 真是垃啊 2333
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   760 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.