nginx通过独立server块+server_name精确匹配+proxy_pass转发实现多测试环境域名隔离,每个子域名(如dev.example.com)对应独立后端端口,并需dns/hosts解析、语法检测及重载生效。

Linux 下用 Nginx 实现多套测试环境的域名隔离,核心是让不同测试域名(比如 dev.example.com、test.example.com、staging.example.com)各自指向独立的后端服务,互不干扰。这不需要改代码,也不依赖服务本身做环境识别,全靠 Nginx 的 server_name 匹配 + proxy_pass 转发 完成。
按域名区分测试环境
这是最常用、最直观的方式。每个测试环境对应一个唯一域名,Nginx 根据请求头中的 Host 字段精准路由。
- 确保所有测试域名已正确解析到该服务器 IP(如通过本地 hosts 或 DNS)
- 为每个环境单独写一个
server块,放在/etc/nginx/conf.d/或/etc/nginx/sites-available/下 -
server_name必须精确匹配目标域名(支持通配符,如*.dev.example.com) -
proxy_pass指向对应环境的后端地址,例如:dev.example.com→http://127.0.0.1:3001test.example.com→http://127.0.0.1:3002staging.example.com→http://127.0.0.1:3003
配合路径前缀做轻量级隔离(可选)
如果不想申请多个子域名,也可以用同一主域名 + 不同路径来区分环境,比如:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
example.com/dev/→ 代理到 dev 后端 -
example.com/test/→ 代理到 test 后端 - 配置时注意
location的匹配顺序和proxy_pass末尾斜杠——location /dev/ { proxy_pass http://127.0.0.1:3001/; }(结尾有/,会自动剥离/dev)location /test/ { proxy_pass http://127.0.0.1:3002/; }
带请求头透传与 Cookie 隔离
测试环境常需保持登录态或调试标识,Nginx 要把关键信息正确传递给后端:
- 用
proxy_set_header Host $host;保证后端收到原始域名 - 用
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For保留真实客户端 IP - 若后端依赖 Cookie 域名隔离(如
Set-Cookie domain=.dev.example.com),可在proxy_cookie_domain中重写:proxy_cookie_domain ~\.example\.com$ .dev.example.com;
验证与热加载
配置完成后别忘了检查语法并重载:
-
sudo nginx -t—— 检查配置是否合法 -
sudo systemctl reload nginx或sudo nginx -s reload—— 无中断生效 - 用
curl -H "Host: dev.example.com" http://localhost在服务器本地测试是否命中对应 server 块










