最有效方式是在server块顶层添加location正则规则拦截敏感后缀并返回403/404,需确保位置靠前、覆盖全路径、防绕过;同时对.php文件实施双重防护,叠加隐藏文件与高危路径前缀封禁,并验证生效。

直接在 server 块中添加独立的 location 规则,匹配后缀并返回 403 或 404,是最有效、最可控的方式。关键不是“怎么写正则”,而是规则位置是否靠前、是否覆盖所有可能路径、是否避免被其他 location 覆盖或绕过。
用正则 location 精准拦截敏感后缀
在 server{} 块顶层(推荐放在 location / 之前)添加如下配置:
location ~* \.(php|sql|bak|conf|log|sh|pl|py|rb|jsp|asp|aspx|cgi|swp|swo|orig|old|env|yml|yaml|ini)$ { return 403; }-
~*表示不区分大小写的正则匹配,覆盖.PHP、.Sql等变体 - 末尾加
$确保完整匹配后缀,防止误判/index.phpx这类干扰 - 返回
403明确拒绝;若需更隐蔽,可用return 404
特别注意 .php 文件的双重防护
仅靠后缀拦截不足以防源码泄露,因为 PHP 脚本可能被当作静态文件直接输出。必须叠加两层保护:
- 先用上述
location ~* \.php$拦截所有直接访问,确保不进 fastcgi_pass 流程 - 再在主
location /中用try_files $uri =404;或try_files $uri $uri/ /index.php?$query_string;,让 Nginx 主动拒绝不存在的 PHP 路径 - 切勿写
try_files $uri /index.php;(缺$query_string),否则可能绕过后端参数校验逻辑
封禁隐藏文件与高危路径前缀
敏感后缀常伴随特定路径模式,需一并阻断:
- 禁止以点开头的隐藏资源:
location ~ /\. { return 403; }(匹配.git、.env、.htaccess) - 显式拦截备份类目录:
location ^~ /wp-content/backups/ { return 403; } - 禁止常见配置目录:
location ^~ /config/ { return 403; }、location ^~ /includes/ { return 403; } -
^~前缀确保优先级高于正则,防止被后续 location 覆盖
验证是否生效的几个关键点
配置后务必检查以下情况,避免“看似拦截实则失效”:
- 用
curl -I http://yoursite.com/test.php确认返回 403/404,而非 200 或 500 - 测试大小写变体:
curl -I http://yoursite.com/SETUP.PHP - 确认未启用
autoindex on;,尤其在别名目录下,否则目录列表可能暴露文件名 - 检查是否有其他
location ~ \.php$块在后面定义了fastcgi_pass——一旦匹配到它,前面的拦截就无效了
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











