nginx 为多业务线配置独立域名反向代理需按域名隔离 server 块,每个块绑定专属 ssl 证书路径、监听 443 端口,并设置 proxy_set_header host $host 和 x-forwarded-proto $scheme;证书须分域申请续期,配置推荐拆分为 conf.d/pay.conf、api.conf 等独立文件。

在 Nginx 中为多业务线配置独立域名的反向代理并管理各自 SSL 证书,核心是“按域名隔离配置 + 按需加载证书”。不需要共用一套证书,每个业务域名(如 pay.example.com、api.example.com、admin.internal.net)可拥有专属的证书文件和独立的 HTTPS 服务块。
每个域名配一个 server 块,绑定专属证书
Nginx 不支持单个 server 块里混用多个域名+多个证书。正确做法是:为每个业务线域名单独写一个 server 块,明确指定 server_name、ssl_certificate 和 ssl_certificate_key 路径。
- 证书路径建议按域名组织,例如:
/etc/nginx/ssl/pay.example.com/fullchain.pem和/etc/nginx/ssl/pay.example.com/privkey.pem - 每个 server 块监听 443 端口,启用 SSL,并只响应匹配的
server_name - 避免把所有域名堆在同一个
server_name后面——那样只能共用同一套证书,不满足“独立证书”需求
证书自动续期要分域管理
若使用 Let’s Encrypt,不能靠全局 renewal 一揽子更新;必须为每个域名单独申请、单独续期。
- 用
certbot --nginx -d pay.example.com -d www.pay.example.com单独申请,certbot 会自动写入对应 server 块并配置自动续期钩子 - 或手动用
certbot certonly --standalone -d api.example.com获取证书后,再在对应 server 块中引用新路径 - 检查续期任务(如
systemctl list-timers | grep certbot)确保每个域名的证书都有独立的 renew 脚本或 cron 条目
代理转发保持域名上下文不丢失
后端服务常需识别原始请求的 Host 和协议,尤其涉及重定向、静态资源路径或 OAuth 回调时。
- 务必在每个 server 块的
location中设置:proxy_set_header Host $host;和proxy_set_header X-Forwarded-Proto $scheme; - 如果后端是 Node.js 或 Spring Boot,它们依赖这些头判断当前是
https://admin.internal.net还是https://pay.example.com - 避免漏掉
proxy_set_header X-Forwarded-For $remote_addr;,否则日志里看不到真实客户端 IP
推荐用 conf.d 分文件管理,提升可维护性
把每个业务线的配置拆成独立文件,比如:
-
/etc/nginx/conf.d/pay.conf→ 管理支付线域名与证书 -
/etc/nginx/conf.d/api.conf→ 管理 API 线域名与证书 -
/etc/nginx/conf.d/admin.conf→ 管理内部管理后台
这样新增业务线只需增一个文件,改错不影响其他域名,也方便配合 CI/CD 自动部署或审计追踪。











