【问题标题】:Nginx: Basic auth protecting folders and PHP files, but not imagesNginx:基本身份验证保护文件夹和 PHP 文件,但不保护图像
【发布时间】:2014-02-04 02:00:22
【问题描述】:

我有以下 Nginx 配置

location ^~ /members {
    auth_basic "Members Area";
    auth_basic_user_file /home/*user*/public/*site*/www/members/.htpasswd;

    location ~ \.php$ {
        include     /data/config/nginx/fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Set header expirations for static content
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff|mp4|flv)$ {
        access_log      off;
        log_not_found   off;
        expires         365d;
    }            
}

旨在为 /members/ 目录以及(.php、.jpg、.mp4 等)中的所有内容设置密码。

在当前状态下,它会提示用户使用 .php 文件的用户/密码框,但它不会触发 jpg 图像的身份验证。

为了清楚起见,发生了以下行为:

  • http://site/members - 提示用户输入用户/密码
  • http://site/members/category.php - 提示用户输入用户/密码
  • http://site/members/content/upload/example.jpg - 用户无需登录即可查看内容

/members/content 文件夹是指向文档根文件夹之外的文件夹的符号链接,我想知道这是否是潜在原因。

我尝试了许多不同的配置,例如删除 /members 块上的 ^~,但无法获得一个有效的配置来覆盖目录中的所有文件。

任何帮助将不胜感激。

【问题讨论】:

  • 所以您在测试图像之前清除了浏览器缓存?如果浏览器已经有图像,则不会向服务器发出请求。
  • 嗨,我每次都清除缓存,并且每次重新运行测试时都请求新的 jpg,但我看到的行为相同。谢谢
  • @Ashley_Evans 此配置应该可以正常工作。您的服务器或 http 块中还有其他东西绕过了身份验证。

标签: authentication nginx


【解决方案1】:

我认为您只需要定义一个新块来捕获成员目录中的图像

location ~ ^/members.*\.(?:ico|css|js|jpe?g|JPG|png|svg|woff|mp4|flv)$ {
   auth_basic "Members Area";
   auth_basic_user_file /home/*user*/public/*site*/www/members/.htpasswd;
}

【讨论】:

  • 嗨,感谢您的输入,我尝试了这个,但不幸的是,它仍然没有按预期在加载新 jpg 文件的新隐身窗口中提示我输入用户名/密码。我在主要位置 ~/members 文件夹之外以及在内部尝试了该块: location ~ \.(?:ico|css|js|jpe?g|JPG|png|svg|woff|mp4|flv)$ 但是没有运气
猜你喜欢
  • 2021-09-24
  • 2014-12-16
  • 1970-01-01
  • 2016-12-22
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2019-03-01
相关资源
最近更新 更多