nginx location块是安全加固最直接有效的落点,需精准控制路径、禁止敏感文件访问、关闭目录索引、限制http方法、防御路径遍历、管控上传大小、ip白名单保护管理路径。

Nginx 的 location 块是安全加固最直接、最有效的落点之一。它不只控制路由,更是第一道访问过滤网。关键在于:按路径精准施控,拒绝默认宽松,堵住常见攻击入口。
限制敏感文件访问
很多配置泄露(如 .conf、.env)、日志下载(.log)、备份文件(.bak、.sql)都源于未拦截的静态路径。必须显式禁止:
- 添加以下规则到
http或对应server块中:location ~* \.(conf|env|log|bak|sql|sh|ini|yml|yaml|gitignore|htaccess)$ { deny all; } - 同时屏蔽隐藏文件和编辑器临时文件:
location ~ /\. { deny all; } location ~ ~$ { deny all; }
禁用目录索引与自动列表
避免用户通过 /uploads/ 这类路径看到全部文件名:
location / {
autoindex off; # 关键:关闭目录浏览
# 其他配置...
}
若业务确需开放某目录(如静态资源),应在独立 location 中显式启用,并加白名单或认证。
限制 HTTP 方法,阻断非常规请求
只允许 GET、HEAD、POST,拒绝 TRACE、OPTIONS、PUT、DELETE 等易被滥用的方法:
location / {
limit_except GET HEAD POST {
deny all;
}
}
注意:limit_except 作用于当前 location,建议在根路径或 API 路径下统一设置。
防止路径遍历与越权访问
对代理或静态服务路径做严格校验,例如只允许 /api/ 下的请求转发,其余一律拦截:
location /api/ {
proxy_pass http://backend/;
proxy_set_header Host $host;
# 其他代理配置...
}
# 拦截所有其他以 /api 开头但不符合规范的路径(如 /api../etc/passwd)
if ($request_uri ~* "/api/.*\.\./") {
return 403;
}
# 默认拒绝所有未明确定义的 location
location / {
return 403;
}
控制上传与请求体大小
防止大文件上传耗尽资源或触发 DoS:
location /upload/ {
client_max_body_size 5m; # 仅该路径限制为 5MB
# 若全局限制,可放在 http/server 块
}
配合 IP 白名单保护管理路径
对 /admin、/wp-admin、/phpmyadmin 等高危路径强制访问控制:
location ^~ /admin/ {
allow 192.168.10.0/24;
allow 2001:db8::/32;
deny all;
}
^~ 优先级高于正则匹配,确保规则稳定生效。
不复杂但容易忽略











