Nginx 反向代理与 SSL 证书自动化管理实践

2025-11-20 · Albert

当你在一台服务器上运行多个 Web 服务时,反向代理是必不可少的。本文记录使用 Nginx Proxy Manager(NPM)管理多站点反代和 SSL 证书的实践经验。

什么是反向代理

反向代理接收客户端请求,根据域名将流量转发到不同的后端服务。这样多个服务可以共享 80/443 端口,每个服务使用独立的子域名。

用户请求 → Nginx (80/443)
              ├── auth.example.com    → Authelia (:9091)
              ├── app.example.com     → Web App (:3005)
              └── db.example.com      → Adminer (:8080)

NPM 的优势

Nginx Proxy Manager 提供了可视化管理界面,相比手写 nginx.conf 配置文件:

通配符证书配置

如果子域名较多,推荐申请通配符证书 *.example.com,避免为每个子域名单独申请:

需要注意的是,通配符证书只覆盖一级子域名,sub.sub.example.com 需要单独申请。

自动续期脚本

虽然 NPM 内置了续期功能,但通配符证书的自动续期有时不太稳定。我额外写了一个 cron 脚本作为保险:

#!/bin/bash
# /opt/docker-services/npm/renew-wildcard.sh
docker exec nginx-proxy-manager certbot renew \
  --cert-name wildcard-example \
  --quiet
docker exec nginx-proxy-manager nginx -s reload

安全建议

总结

NPM 大幅降低了 Nginx 反代的管理门槛。对于个人服务器来说,它是一个非常实用的工具。配合通配符证书和自动续期,基本可以做到部署后不用管。