如何用群晖反代为Docker服务部署SSL

10 人参与
  • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
  • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
  • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。
  • 把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

  • “目标主机名”填写 NAS 在局域网的 IP(如 192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。
  • 勾选“启用自定义证书”,从下拉列表中选取前一步已经导入的 Let’s Encrypt 证书。
  • 保存后,DSM 会在内部生成一个 Nginx 片段,等同于:
    server {
        listen 8443 ssl;
        server_name app.example.com;
    
        ssl_certificate /usr/syno/etc/certificate/_archive/your_cert.crt;
        ssl_certificate_key /usr/syno/etc/certificate/_archive/your_key.key;
    
        location / {
            proxy_pass http://192.168.1.100:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  • 路由器端口映射的细节

    在家用路由的管理界面里,新建一条转发规则:外部端口指向 NAS 的 8443(或上述自定义端口),内部 IP 指向 NAS 本机的 IP。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。

    常见故障与排查思路

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

  • 在“源主机名”填写外部访问的域名(如 app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443
  • “目标主机名”填写 NAS 在局域网的 IP(如 192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。
  • 勾选“启用自定义证书”,从下拉列表中选取前一步已经导入的 Let’s Encrypt 证书。
  • 保存后,DSM 会在内部生成一个 Nginx 片段,等同于:
    server {
        listen 8443 ssl;
        server_name app.example.com;
    
        ssl_certificate /usr/syno/etc/certificate/_archive/your_cert.crt;
        ssl_certificate_key /usr/syno/etc/certificate/_archive/your_key.key;
    
        location / {
            proxy_pass http://192.168.1.100:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  • 路由器端口映射的细节

    在家用路由的管理界面里,新建一条转发规则:外部端口指向 NAS 的 8443(或上述自定义端口),内部 IP 指向 NAS 本机的 IP。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。

    常见故障与排查思路

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

  • 打开 控制面板 → 应用程序 → 反向代理,点击“创建”。
  • 在“源主机名”填写外部访问的域名(如 app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443
  • “目标主机名”填写 NAS 在局域网的 IP(如 192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。
  • 勾选“启用自定义证书”,从下拉列表中选取前一步已经导入的 Let’s Encrypt 证书。
  • 保存后,DSM 会在内部生成一个 Nginx 片段,等同于:
    server {
        listen 8443 ssl;
        server_name app.example.com;
    
        ssl_certificate /usr/syno/etc/certificate/_archive/your_cert.crt;
        ssl_certificate_key /usr/syno/etc/certificate/_archive/your_key.key;
    
        location / {
            proxy_pass http://192.168.1.100:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  • 路由器端口映射的细节

    在家用路由的管理界面里,新建一条转发规则:外部端口指向 NAS 的 8443(或上述自定义端口),内部 IP 指向 NAS 本机的 IP。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。

    常见故障与排查思路

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

    • 打开 控制面板 → 应用程序 → 反向代理,点击“创建”。
    • 在“源主机名”填写外部访问的域名(如 app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443
    • “目标主机名”填写 NAS 在局域网的 IP(如 192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。
    • 勾选“启用自定义证书”,从下拉列表中选取前一步已经导入的 Let’s Encrypt 证书。
    • 保存后,DSM 会在内部生成一个 Nginx 片段,等同于:
      server {
          listen 8443 ssl;
          server_name app.example.com;
      
          ssl_certificate /usr/syno/etc/certificate/_archive/your_cert.crt;
          ssl_certificate_key /usr/syno/etc/certificate/_archive/your_key.key;
      
          location / {
              proxy_pass http://192.168.1.100:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }

    路由器端口映射的细节

    在家用路由的管理界面里,新建一条转发规则:外部端口指向 NAS 的 8443(或上述自定义端口),内部 IP 指向 NAS 本机的 IP。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。

    常见故障与排查思路

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

    • 打开 控制面板 → 应用程序 → 反向代理,点击“创建”。
    • 在“源主机名”填写外部访问的域名(如 app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443
    • “目标主机名”填写 NAS 在局域网的 IP(如 192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。
    • 勾选“启用自定义证书”,从下拉列表中选取前一步已经导入的 Let’s Encrypt 证书。
    • 保存后,DSM 会在内部生成一个 Nginx 片段,等同于:
      server {
          listen 8443 ssl;
          server_name app.example.com;
      
          ssl_certificate /usr/syno/etc/certificate/_archive/your_cert.crt;
          ssl_certificate_key /usr/syno/etc/certificate/_archive/your_key.key;
      
          location / {
              proxy_pass http://192.168.1.100:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }

    路由器端口映射的细节

    在家用路由的管理界面里,新建一条转发规则:外部端口指向 NAS 的 8443(或上述自定义端口),内部 IP 指向 NAS 本机的 IP。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。

    常见故障与排查思路

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

    在家庭或小型企业的 NAS 环境里,Docker 常被用来跑私有的 Web 服务。缺少 HTTPS 证书时,浏览器会直接抛出“不安全”警告,导致用户体验受挫。借助群晖的反向代理功能,可以把已有的 Let's Encrypt 证书直接挂在代理层,实现对任意容器的统一加密入口,而无需在每个容器内部再配置证书。

    前置条件

    ① 群晖 DSM 已经成功申请并安装了针对外网域名的 SSL 证书;② 目标容器在本地网络中能够通过 IP:端口直接访问;③ 路由器的外部端口能够转发到 NAS 的反代监听端口。

    反向代理的核心配置

    • 打开 控制面板 → 应用程序 → 反向代理,点击“创建”。
    • 在“源主机名”填写外部访问的域名(如 app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443
    • “目标主机名”填写 NAS 在局域网的 IP(如 192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。
    • 勾选“启用自定义证书”,从下拉列表中选取前一步已经导入的 Let’s Encrypt 证书。
    • 保存后,DSM 会在内部生成一个 Nginx 片段,等同于:
      server {
          listen 8443 ssl;
          server_name app.example.com;
      
          ssl_certificate /usr/syno/etc/certificate/_archive/your_cert.crt;
          ssl_certificate_key /usr/syno/etc/certificate/_archive/your_key.key;
      
          location / {
              proxy_pass http://192.168.1.100:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }

    路由器端口映射的细节

    在家用路由的管理界面里,新建一条转发规则:外部端口指向 NAS 的 8443(或上述自定义端口),内部 IP 指向 NAS 本机的 IP。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。

    常见故障与排查思路

    • 访问时仍提示不安全:检查证书是否绑定到正确的域名,且域名解析指向了公网 IP。
    • 出现 502 Bad Gateway:确认容器端口在本机可达(curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。
    • 证书续期后失效:在 DSM 的“证书”页面重新关联到反向代理,或手动刷新 Nginx 配置(synoservice --restart nginx)。

    把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。

    参与讨论

    10 条评论
    • ObsidianDoom

      这个方法在DSM7.2上还能用吗?证书下拉列表有时候不显示新导入的。

    • 昵称4

      前几天刚折腾完,502错误原来是防火墙没开本地回环,坑死。

    • 溯光

      源端口填8443的话,外部访问是不是得加端口号啊?

    • 寂静星空

      群晖反代配SSL确实省事,不用每个容器搞证书了。

    • 心梦旅人

      老用户表示这方案用了三年了,比Traefik轻量多了。

    • 神瑛侍者

      证书续期后忘了重启nginx,白折腾俩小时,血泪教训🤔

    • 韵绕诗行

      新手问下,“目标主机名”填127.0.0.1行不行?还是必须局域网IP?

    • 暗涌流

      路由器转发端口放通了但外网打不开,DNS解析确认没问题,还有啥可能?

    • 阿斌

      感觉还行,至少浏览器不弹警告了,家里人终于不问我为啥网站不安全了。

    • 玛瑙之心

      勾选自定义证书那步我漏了,结果HTTPS直接404,查了半天才想起来。