Nginx禁止访问敏感文件的核心是location精准拦截:用location ~ \.(php|py|env|yml|ini)$ { deny all; }封禁源码与配置文件,location ^~ /WEB-INF/等屏蔽敏感目录,location ~ /\. { deny all; }阻断隐藏文件,规则须置于server块顶部确保优先匹配。

不能靠“隔离在沙箱目录外”来保障业务逻辑安全——这本身是个危险误解。Nginx 动静分离的核心是流量分发与资源处理分工,不是安全沙箱机制。真正保护重要业务逻辑文件,关键在于路径不可达 + 权限最小化 + 请求拦截,而不是简单地把它们“放外面”。
明确哪些文件必须被严格保护
以下文件绝不能通过任何 HTTP 请求直接访问:
- 后端源码(如
.java、.py、.php源文件) - 配置文件(
application.yml、database.conf、.env) - 敏感目录(
/WEB-INF/、/config/、/src/、/vendor/) - 临时文件或日志路径(
/tmp/、/logs/)
用 location + deny 实现硬性屏蔽
Nginx 的 location 可以精准匹配危险路径或后缀,并立即拒绝响应。这不是“动静分离”的延伸功能,而是基础安全防线:
- 禁止访问所有源码文件:
location ~ \.(php|py|java|rb|pl|sh|sql|yml|yaml|env|ini|cfg)$ { deny all; } - 禁止进入敏感目录:
location ^~ /WEB-INF/ { deny all; }location ^~ /config/ { deny all; } - 禁止访问隐藏文件:
location ~ /\. { deny all; }
这些规则应放在 server 块最上方,确保优先匹配,不被后续 location / 或静态规则覆盖。
动静分离配置本身不暴露业务逻辑
正确配置动静分离,反而能降低风险:
- 静态资源走
alias或root,仅限指定目录(如/var/www/static/),绝不允许向上跳转(确保路径无../注入) - 动态请求统一交给
proxy_pass,由后端应用自行控制路由;Nginx 不解析、不读取、不返回业务代码 - 避免使用
try_files $uri @backend等宽松回退逻辑——它可能意外暴露未授权的文件
操作系统层加固才是根本
Nginx 配置再严,也挡不住有权限的用户直接 cat 或 ls。所以必须同步做:
- 业务逻辑文件归属非 nginx 用户(如
app:app),且权限设为640或更严 - nginx 工作进程以低权限用户运行(如
www-data或自定义nginx用户),禁用 shell - 禁用目录列表:
autoindex off;(默认已关,但务必确认) - 若用容器部署,挂载时设
ro(只读)标志保护代码卷
动静分离不是安全沙箱,但它配合上述措施,能让攻击者连文件是否存在都探测不到——这才是真正的隔离。


















