Nginx托管多站点的核心是隔离与可运维性:每个站点须独立证书(fullchain.pem+600权限私钥)、按需定制TLS策略(禁用全局ssl配置)、租户级限流(基于$server_name)、分离日志与错误页,并确保续期后可靠reload。

一台 Nginx 托管几十个站点,关键不是“能不能配”,而是“配完能不能稳、安不安全、出问题好不好查”。核心在于:每个站点必须拥有自己的证书文件、独立的 TLS 策略、隔离的限流与访问控制逻辑,且互不干扰。
证书完全独立,拒绝混用或通配符偷懒
每个 server 块必须显式指定专属证书路径,不能共用同一组 PEM 文件:
-
证书链要完整:使用
fullchain.pem(域名证书 + 中间证书),避免浏览器报NET::ERR_CERT_AUTHORITY_INVALID -
私钥权限必须是 600:运行
chmod 600 /etc/nginx/ssl/site-a/privkey.pem,防止越权读取 -
不推荐泛域名证书覆盖全部站点:例如
*.example.com不匹配example.com,也不覆盖api.other-site.com;建议按站点签发单域名证书,或使用 SAN 证书精准包含所需域名 - 示例配置:
ssl_certificate /etc/nginx/ssl/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/blog.example.com/privkey.pem;
TLS 协议与加密套件按站定制
不同业务对兼容性要求不同,比如后台系统可激进启用 TLSv1.3 + Modern Cipher,而对接老设备的接口需保留 TLSv1.2 + Intermediate 套件:
- 每个
server块内单独写ssl_protocols和ssl_ciphers,禁止在http块全局统一设置 - 务必开启
ssl_prefer_server_ciphers on;,确保服务端 cipher 优先级生效 - 启用 OCSP 装订减少握手延迟:
ssl_stapling on; ssl_stapling_verify on; - 强制 HTTPS 重定向建议用
return 301 https://$host$request_uri;,而非rewrite
请求与连接层面做租户级限流
防止单个站点被刷爆拖垮整台服务器,限流策略要绑定到具体域名或路径:
- 在
http块定义共享限流区,但通过变量区分作用域:limit_req_zone $server_name zone=site_api:20m rate=100r/m;limit_conn_zone $server_name zone=site_conn:10m; - 在对应
server或location中调用:limit_req zone=site_api burst=50 nodelay;limit_conn site_conn 20; - 登录页等敏感路径建议额外加 IP 维度限流:
limit_req zone=login burst=5 nodelay;
日志与错误响应也需按站分离
故障排查时,混在一起的日志等于没有日志:
- 每个
server块配独立access_log和error_log,路径含域名便于识别:access_log /var/log/nginx/blog.example.com.access.log main;error_log /var/log/nginx/blog.example.com.error.log warn; - 自定义错误页提升专业性:
error_page 404 /404.html;,静态资源走本地,避免反向代理放大失败 - 对管理后台类站点,可配合
allow/deny或 JWT 鉴权,不只靠证书
不复杂但容易忽略:证书自动续期后必须 reload nginx,acme.sh 的 --reloadcmd 要验证是否真执行成功;所有配置修改后用 nginx -t 检查语法,再 systemctl reload nginx,别直接 kill 进程。


















