Nginx中可通过location指令配合deny all或return 403禁止外部访问敏感路径,推荐使用^~前缀匹配或=精确匹配以确保安全性和优先级,结合auth_basic可实现分级管控,并需重载配置后验证生效。

可以通过 location 指令配合 deny all 或 return 403 快速禁止外部访问特定目录,这是 Nginx 中最常用、最有效的敏感路径防护方式。
匹配敏感目录的 location 写法
使用前缀匹配(location ^~)或精确匹配(location =)更安全,避免正则误伤。例如屏蔽 /admin/、/config/、.git/ 等路径:
-
location ^~ /admin/ { deny all; }—— 拒绝所有用户访问/admin/及其子路径 -
location = /config.php { return 403; }—— 精确拦截单个敏感配置文件 -
location ~ /\.git { return 403; }—— 正则匹配隐藏目录(注意转义点号)
优先级与匹配顺序要注意
Nginx 的 location 匹配有明确优先级:精确匹配(=) > 前缀匹配(^~) > 正则匹配(~ 或 ~*) > 普通前缀匹配。若同时存在多个规则,需确保高优先级规则不被低优先级覆盖:
- 避免写成
location / { ... }在前,再写location ^~ /data/在后——后者仍生效,但若误用普通前缀(如location /data/),可能被前面的通配规则抢先匹配 - 推荐统一用
^~处理目录类路径,语义清晰且不参与正则竞争
结合 auth_basic 实现分级管控
完全禁止太粗暴,部分后台目录可改用密码保护:
location ^~ /backup/ { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; }- 需提前用
htpasswd工具生成账号文件,比开放访问更可控 - 注意:认证信息通过 HTTP Basic 传输,务必配合 HTTPS 使用
验证是否生效的小技巧
修改配置后必须重载 Nginx(nginx -s reload),然后快速验证:
- 用
curl -I http://yoursite.com/.env检查返回是否为403 Forbidden或404 Not Found - 在浏览器中直接访问目标路径,确认不返回源码、配置内容或目录列表
- 检查 Nginx 错误日志(
error_log配置项指定路径),看是否有access forbidden类提示









