curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。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。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443。192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。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。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443。192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。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。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443。192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。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。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443。192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。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。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
在家庭或小型企业的 NAS 环境里,Docker 常被用来跑私有的 Web 服务。缺少 HTTPS 证书时,浏览器会直接抛出“不安全”警告,导致用户体验受挫。借助群晖的反向代理功能,可以把已有的 Let's Encrypt 证书直接挂在代理层,实现对任意容器的统一加密入口,而无需在每个容器内部再配置证书。
① 群晖 DSM 已经成功申请并安装了针对外网域名的 SSL 证书;② 目标容器在本地网络中能够通过 IP:端口直接访问;③ 路由器的外部端口能够转发到 NAS 的反代监听端口。
app.example.com),源协议选 HTTPS,源端口随意设置一个未冲突的数字,例如 8443。192.168.1.100),目标协议保持 HTTP,目标端口填写容器实际暴露的端口(例如 8080)。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。务必确认防火墙中已放通该端口,否则即便代理配置无误,外部请求仍会被拦截。
curl http://127.0.0.1:8080),以及防火墙是否阻塞了内部流量。synoservice --restart nginx)。把 SSL 的“入口”交给群晖的反向代理,容器内部继续保持轻量级,不必为每个镜像单独管理证书。这样一来,原本只能用 HTTP 暴露的服务,瞬间升级为可信的 HTTPS 链接,用户访问时只会看到锁形图标。
参与讨论
这个方法在DSM7.2上还能用吗?证书下拉列表有时候不显示新导入的。
前几天刚折腾完,502错误原来是防火墙没开本地回环,坑死。
源端口填8443的话,外部访问是不是得加端口号啊?
群晖反代配SSL确实省事,不用每个容器搞证书了。
老用户表示这方案用了三年了,比Traefik轻量多了。
证书续期后忘了重启nginx,白折腾俩小时,血泪教训🤔
新手问下,“目标主机名”填127.0.0.1行不行?还是必须局域网IP?
路由器转发端口放通了但外网打不开,DNS解析确认没问题,还有啥可能?
感觉还行,至少浏览器不弹警告了,家里人终于不问我为啥网站不安全了。
勾选自定义证书那步我漏了,结果HTTPS直接404,查了半天才想起来。