最省心的方式是直接用 nginx proxy manager(npm),它集成反向代理、ssl 自动申请与续期、图形化管理于一体,无需手写配置或操作 let’s encrypt 命令行;npm 适合中小团队和独立开发者,而 nginx-proxy + docker-gen 更适合需深度定制或兼容旧容器的场景。

最省心的方式是直接用 Nginx Proxy Manager(NPM),它把反向代理、SSL 申请与续期、图形化管理全打包进一个容器,不用手写 nginx.conf,也不用碰 Let’s Encrypt 命令行。
选 NPM 还是原生 nginx-proxy?
两者都基于 Docker 自动化,但定位不同:
- Nginx Proxy Manager:适合大多数中小团队和独立开发者。有 Web 界面,点几下就能配好 HTTPS,证书自动续期,连 DNS 解析状态都能在后台看到。
-
nginx-proxy + docker-gen:适合需要深度定制或已有大量 legacy 容器的场景。它监听 Docker 事件,自动更新配置并重载 nginx,但不内置 SSL 管理,需额外搭配
letsencrypt-nginx-proxy-companion才能自动签发证书。
用 Docker Compose 一键启动 NPM
确保已安装 Docker(≥1.13)和 Docker Compose(v2 或 v1.29+),然后执行:
- 新建目录并进入:
mkdir npm && cd npm - 创建
docker-compose.yml,内容如下:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
运行 docker-compose up -d,等待约 30 秒,访问 http://你的服务器IP:81,用默认账号登录:
Email: admin@example.com Password: changeme
添加反向代理并启用自动 HTTPS
登录后台后按顺序操作:
- 点击左侧 Proxy Hosts → Add Proxy Host
-
Domain Names:填已解析到本机的域名(如
blog.example.com,支持多个,空格或换行分隔) -
Scheme:选
http;Forward Hostname/IP:填后端服务地址(如容器名halo或内网 IP192.168.1.100) -
Forward Port:填后端服务端口(如 Halo 是
8090,Memos 是5230) - 切换到 SSL 标签页:
✓ 勾选 Request a new SSL Certificate
✓ 勾选 Force SSL 和 HTTP/2 Support
✓ 同意 Let’s Encrypt 条款 - 点击 Save,系统自动完成域名验证、证书申请、HTTPS 配置及每 60 天续期
几秒后状态变为 SSL Active,即可通过 https://blog.example.com 访问,全程无需手动干预。
如果坚持用自定义 Nginx 容器
适用于需要完全控制配置逻辑的场景,比如统一日志格式、加 WAF 规则或对接内部 CA:
- 提前创建好自定义
nginx.conf和vhost/*.conf挂载目录 - 在
docker-compose.yml中挂载配置与证书路径,例如:- ./nginx/conf:/etc/nginx/nginx.conf- ./nginx/certs:/etc/nginx/certs - 若需 HTTPS,建议用 OpenSSL 生成测试证书,或用 Certbot 手动申请 Let’s Encrypt 证书后放入对应目录
- 每次修改配置后,需进容器执行
nginx -t && nginx -s reload生效
这种方式灵活但维护成本高,除非有明确定制需求,否则不推荐作为首选。











