最稳妥方式是物理隔离配置:用独立server块或include加载test.conf与prod.conf,分别绑定测试/生产域名及根目录;需同步处理dns解析、ssl证书路径、目录权限,并每次用nginx -t验证后reload。

直接按环境拆分 server 块或用 include 加载独立配置文件,是最清晰、最稳妥的划分方式。不建议在同一个 server 块里混写两个环境的 server_name,也不推荐用变量动态控制域名——Nginx 不支持运行时解析 server_name 中的变量。
用独立 server 块区分环境
在 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf 中,分别写两个互不干扰的 server 块:
- 测试块监听
test.example.com或dev.example.com,root /var/www/test,可配listen 80或listen 443 ssl - 生产块监听
example.com和www.example.com,root /var/www/prod,同样用listen 80或listen 443 ssl - 只要
server_name不重复,Nginx 就能靠 Host 头精准路由,无需额外判断
用 include 按环境加载配置文件
更推荐的做法是把配置物理隔离:
- 新建
/etc/nginx/conf.d/test.conf,只放测试环境的完整server块 - 新建
/etc/nginx/conf.d/prod.conf,只放生产环境的完整server块 - 确保主配置中有
include /etc/nginx/conf.d/*.conf;(通常默认就有) - 上线时只需重命名或移除
test.conf,不用动任何其他配置
配套要点不能漏
光分 server 块还不够,这些必须同步处理:
- DNS 解析:测试域名要能解析到这台服务器 IP,否则请求根本进不来
-
SSL 证书:测试和生产若都走 HTTPS,需各自申请或使用通配符证书,
ssl_certificate和ssl_certificate_key路径不能共用 -
root 目录权限:确保 Nginx 用户(如
nginx或www-data)对/var/www/test和/var/www/prod都有读取权限 -
验证与重载:每次改完执行
sudo nginx -t检查语法,通过后再sudo nginx -s reload
结构上没玄机,关键是把测试和生产的配置彻底隔开,避免互相覆盖或误触发。











