用独立 server 块、精确 server_name 和严格后端转发可构建真正隔离的沙箱测试环境,每个环境独享域名、配置与流量路径,需显式透传 host/ip/cookie、拒绝非法请求、禁用目录浏览、限制文件权限与敏感文件访问。

用独立 server 块 + 精确 server_name + 严格后端转发,就能在 Nginx 中构建真正隔离的沙箱测试环境。这不是靠目录或端口凑数,而是每个环境拥有专属域名、专属配置、专属流量路径,互不感知。
每个测试环境一个 server 块
不能把 dev、test、staging 全塞进同一个 server_name dev.example.com test.example.com staging.example.com —— 这样它们共享 root、日志、证书和所有指令,根本谈不上隔离。
- 为
dev.example.com单独建/etc/nginx/conf.d/dev.conf - 为
test.example.com单独建/etc/nginx/conf.d/test.conf - 每个块必须显式写
listen 80;或listen 443 ssl;,否则不生效 -
server_name写精确值(如dev.example.com),泛域名(如*.dev.example.com)需另加一行匹配根域名
精准转发 + 请求头透传
转发不是简单写个 proxy_pass 就完事。测试环境常依赖原始 Host、真实 IP 和 Cookie 域名,这些必须显式透传。
- 用
proxy_pass http://127.0.0.1:3001/;(结尾带/)避免路径拼接错误 - 加
proxy_set_header Host $host;,让后端收到的是dev.example.com而非localhost - 加
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For,保留客户端真实地址 - 若后端用 Cookie 做登录态隔离,加
proxy_cookie_domain ~\.example\.com$ .dev.example.com;重写域名为当前环境
禁止跨环境访问与路径越界
光转发还不够,得堵死所有绕过可能。测试环境最容易因配置疏漏被误访问或探测。
- 在每个
server块顶部加if ($host != "dev.example.com") { return 444; },拒绝非法 Host 头请求 - 禁用目录浏览:
autoindex off; - 静态资源用
root /var/www/dev;,不用alias配错路径;确保该目录不包含源码或配置文件 - 不启用
try_files $uri @backend这类宽松回退,防止意外暴露未授权文件
操作系统层配合加固
Nginx 配置再严,也挡不住有权限的用户直接读文件。必须同步做权限控制:
- 测试环境代码归属非 nginx 用户(如
dev:dev),目录权限设为750,关键文件640 - Nginx worker 进程以低权限用户运行(如
www-data或自定义nginx用户),且禁用 shell 登录 - 若用 Docker,挂载代码卷时加
ro(只读)标志 - 敏感文件后缀一律拦截:
location ~ \.(env|yml|ini|log|sh)$ { deny all; },放server块最上方











