从Apache迁移至Nginx:全局禁止所有Server块访问.htaccess失败求助
全局禁止访问Nginx下的.ht开头文件
你之前的方法无效,是因为默认Server块仅会处理未匹配到任何指定server_name的请求,而你已配置的虚拟主机(带明确server_name的Server块)会优先处理对应域名的请求,不会继承默认Server块的规则。
要让禁止规则全局生效,最可靠的方式是使用Nginx的include指令批量引入规则:
步骤1:创建全局规则片段
在Nginx配置目录下新建一个配置片段文件,比如/etc/nginx/snippets/deny_ht_files.conf,写入以下内容:
location ~ /\.ht { deny all; }
步骤2:在所有Server块中引入该片段
打开每个虚拟主机的Server配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下),在每个server {...}块内部添加一行:
include /etc/nginx/snippets/deny_ht_files.conf;
注意:Nginx的location指令必须嵌套在server块内,无法直接在http块下全局声明,因此必须确保每个server块都引入该片段。
验证配置并生效
- 检查配置语法是否正确:
nginx -t
- 重载Nginx使配置生效:
systemctl reload nginx
此时再访问任意虚拟主机下的.htaccess或其他.ht开头的文件,都会返回403 Forbidden,规则全局生效。
内容的提问来源于stack exchange,提问作者aequalsb
相关产品推荐
相关产品推荐

