Nginx:密码保护目录索引但显示子路由

Posted

技术标签:

【中文标题】Nginx:密码保护目录索引但显示子路由【英文标题】:Nginx: Password Protect directory index but display subroute 【发布时间】:2021-12-28 19:54:48 【问题描述】:

我的目录结构如下:

/home
/home/static
/home/static/image1.png
/home/static/pdf1.pdf

我想用密码保护www.mypage.com/uploads 的访问并可视化当前在该目录中的文件的索引,但如果有人转到www.mypage.com/uploads/pdf1.pdf,则不应验证请求并在不询问密码的情况下显示文件。

到目前为止,我有以下 nginx 配置,它要求我在 /uploads 路径以及 /uploads/pdf1.pdf 上输入用户名和密码。

Nginx 配置

location /uploads 
  alias /home/static/;
  autoindex on;
  auth_basic "Private Route";
  auth_basic_user_file /etc/apache2/.htpasswd;

[编辑] 建议的工作解决方案:

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;

【问题讨论】:

【参考方案1】:

可能的解决方案之一:

location /uploads 
    alias /home/static; # no trailing slash here!
    location = /uploads/ 
        autoindex on;
        auth_basic "Private Route";
        auth_basic_user_file /etc/apache2/.htpasswd;
    

【讨论】:

+1。感谢您的回复。我最终实施了另一个解决方案。不过你的看起来更干净。 @renanz 您在编辑中添加的解决方案不可行。它将为您提供 HTTP 403 Forbidden(请求 /uploads 将被重定向到 /uploads/ 禁用自动索引的位置)。此外,您的/uploads$ 正则表达式模式将匹配任何以/uploads 结尾的字符串(例如/some/path/uploads/second/path/uploads 等)。此外,使用正则表达式匹配会对性能产生额外影响,应尽可能避免。

以上是关于Nginx:密码保护目录索引但显示子路由的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 中为所有路由(主路由和所有子路由)应用 canActivate 保护

WIFI密码正确但总提示密码错误是啥原因?

使用 nginx 反向代理后面的 keycloak 保护 nodejs 中的路由

反应路由器 - 受保护的路由组件不起作用

admin的默认密码是多少

Nginx下配置Http Basic Auth保护目录