Nginx如何给目录索引加密码保护但允许直接访问子路径文件
Nginx 目录访问差异化权限配置问题
现有目录结构
/home /home/static /home/static/image1.png /home/static/pdf1.pdf
需求说明
- 访问
www.mypage.com/uploads时需要密码验证,验证通过后才可查看该目录下的文件索引 - 访问
www.mypage.com/uploads/pdf1.pdf这类具体文件路径时,无需身份验证即可直接返回文件内容
原有错误配置
原配置会导致/uploads路径和所有/uploads/下的子路径文件访问时都要求输入账号密码,不符合需求:
location /uploads { alias /home/static/; autoindex on; auth_basic "Private Route"; auth_basic_user_file /etc/apache2/.htpasswd; }
可行解决方案
利用Nginx location匹配优先级规则(正则匹配优先级高于前缀匹配),拆分两个location规则即可实现需求:
location ~/uploads$ { alias /home/static/; autoindex on; auth_basic "Private Route"; auth_basic_user_file /etc/apache2/.htpasswd; } location /uploads { alias /home/static/; autoindex off; auth_basic off; }
规则说明
- 带正则的
~/uploads$只会精准匹配/uploads路径,仅对目录索引页启用密码验证 - 普通前缀匹配
/uploads会覆盖所有/uploads/开头的子路径,关闭身份验证和目录索引,仅提供具体文件的直接访问能力
内容的提问来源于stack exchange,提问作者renanz
相关产品推荐
相关产品推荐

