企业级多域名项目应按域名隔离配置:每个域名独立.conf文件、专属证书与日志路径、通用逻辑抽为include片段,主配置仅作加载与全局参数设置。

企业级多域名项目最怕配置一锅炖——改一个域名,全站抖三抖。核心思路就一条:按域名隔离、按职责分层、按生命周期解耦。
目录结构要体现“一个域名一个文件”
所有站点配置统一放在 /etc/nginx/conf.d/ 下,每个域名一个独立 .conf 文件,命名建议用主域名(如 admin.example.com.conf、api.example.com.conf)。不推荐把多个 server 块塞进 default.conf 或 nginx.conf 里,否则查日志、调证书、加 HTTPS 都容易串。
- 每个 .conf 文件只包含一个完整的
server块(HTTP + HTTPS 各一个,或用if ($scheme = http)重定向) - 多个子域名(如 blog.example.com 和 docs.example.com)也各自独立成文件,不合并
- 避免使用通配符
server_name *.example.com,除非你真打算用同一套代码服务所有子域
证书和日志必须按域名归档
SSL 证书和访问日志不是全局资源,而是每个域名的专属资产。目录要和配置文件一一对应:
- 证书存到 /etc/nginx/certs/example.com/,内含
fullchain.pem和privkey.pem - 日志写入 /var/log/nginx/example.com/,每个域名有自己的
access.log和error.log - 在配置中显式写死路径,比如:
ssl_certificate /etc/nginx/certs/example.com/fullchain.pem;access_log /var/log/nginx/example.com/access.log main;
通用逻辑抽离成可复用片段
重复代码是维护噩梦。把跨域名共用的部分单独拆出来,放在 /etc/nginx/conf.d/common/ 目录下:
-
proxy_params.conf:定义反向代理常用头(
X-Real-IP、X-Forwarded-For等) -
security_headers.conf:统一加
Strict-Transport-Security、X-Content-Type-Options等安全头 - php_fastcgi.conf(如需):PHP-FPM 公共参数
- 每个站点配置里用
include /etc/nginx/conf.d/common/proxy_params.conf;引入
主配置只做加载和兜底,不做业务逻辑
/etc/nginx/nginx.conf 的 http 块里,只需两行关键 include:
-
include /etc/nginx/conf.d/*.conf;—— 加载所有域名配置 -
include /etc/nginx/conf.d/common/*.conf;(可选)—— 加载通用片段 - 删掉或注释掉原来的
server块,尤其别留default_server占坑,防止未匹配域名打到默认站 - 全局设置(如
worker_processes、keepalive_timeout)保留在这里,但不掺杂任何具体域名信息


















