nginx 应通过高优先级 location 规则直接拦截敏感路径:统一屏蔽 /. 开头路径、精确匹配关键单文件(如 /.env)、前缀匹配敏感目录(如 /storage/logs/)、后缀过滤危险文件(如 .env/.log),全程关闭日志以规避暴露。

直接在 location 块中禁止访问敏感隐藏文件或目录,关键是用高优先级匹配 + 硬性拦截 + 无日志暴露,而不是等请求到达后再判断。核心不是“过滤”,而是让这类请求根本不会进入文件系统或日志系统。
统一屏蔽所有点开头的路径(推荐首选)
像 /.git/、/.env、/.htaccess 这类路径共性明确——都以 /. 开头。一条正则就能覆盖全部层级:
location ~ /\. { deny all; access_log off; log_not_found off; }- 必须放在
location /或其他通用规则之前,否则可能被低优先级规则提前匹配而失效 -
\.中的反斜杠是必须的,否则.在正则里是通配符,会误匹配任意字符 -
access_log off和log_not_found off能避免扫描刷爆日志
精确匹配根目录下关键单文件
对泄露即失守的文件(如 /.env、/wp-config.php),用 = 精确匹配最安全,不带歧义、性能高:
location = /.env { return 404; access_log off; }location = /nginx.conf { return 404; access_log off; }- 只匹配完整路径,不会影响
/public/.env.example这类非敏感文件 - 返回
404比403更隐蔽,不向攻击者确认路径存在
前缀匹配整个敏感目录(含子路径)
对 /admin/、/storage/logs/、/backup/ 这类需整体封禁的目录,用 ^~ 前缀匹配:
location ^~ /storage/logs/ { return 404; access_log off; }location ^~ /config/ { deny all; }- 结尾的
/很重要,避免误伤同名文件(如/config.php不受影响) -
^~优先级高于正则,不参与竞争,语义清晰,防大小写绕过(如/.Git/也被拦)
补充:按后缀批量拦截危险残留文件
备份、日志、配置类文件常被连带扫描,单独加一层后缀过滤能显著降低攻击面:
location ~* \.(env|ini|log|bak|swp|conf|yml|yaml|sql|sh|py|xml)$ { return 404; access_log off; }-
~*表示忽略大小写,覆盖.ENV、.SQL等变体 - 结尾的
$锚定,防止误匹配/api/app.js?env=1这类查询参数











