如何禁用根目录及指定文件的下载权限?基于Plesk Obsidian的Nginx配置问题排查
解决Plesk Obsidian中禁用敏感文件下载权限的问题
我之前也踩过类似的坑——在Plesk里加了Nginx指令却没生效,核心问题出在规则的匹配范围和优先级上。下面给你一步步搞定:
问题分析
你原来写的location /.env { deny all; }只能匹配根目录下的.env文件,子目录里的完全不会被拦截;另外,Nginx的规则匹配顺序可能让你的规则被Plesk默认的静态文件处理规则覆盖,导致没生效。
正确的解决方案
1. 编写覆盖所有目录的Nginx规则
要拦截根目录及所有子目录的敏感文件,得用正则匹配的location规则,同时覆盖所有你想禁止的文件类型。
把你现有的指令替换成下面的内容(可以按需添加更多敏感文件名):
passenger_enabled on; passenger_app_type wsgi; passenger_startup_file passenger_wsgi.py; # 拦截所有目录下的敏感文件,返回403禁止访问 location ~* /(\.env|settings\.py|\.gitignore|\.htaccess) { deny all; return 403; }
规则说明
~*:启用不区分大小写的正则匹配,确保像.Env或Settings.PY这类变体也会被拦截/(\.env|settings\.py|...):括号里是你要禁止的文件名,注意用\转义.(因为正则里.是通配符),用|分隔多个文件deny all;:拒绝所有来源的访问请求return 403;:明确返回403 Forbidden状态码,避免返回默认的模糊错误页面
2. 生效配置并测试
- 在Plesk的“Apache & nginx Settings”页面点击Apply保存配置
- 重启Nginx(可以在Plesk的
Tools & Settings > Services Management找到Nginx,点击Restart) - 用浏览器隐私模式(或清空缓存)测试访问
https://example.com/.env和https://example.com/projectfolder/settings.py,正常应该返回403页面
额外排查点
如果还是没生效,检查这两个地方:
- 有没有在Plesk的“Apache directives”里添加了冲突的规则?比如允许访问这些文件的规则
- 确认你的域名在Plesk里是用Nginx作为反向代理(默认是),没有强制用Apache处理所有请求
内容的提问来源于stack exchange,提问作者Syahmi
相关产品推荐
相关产品推荐

