如何使用 nginx 对目录进行密码保护,但不保护目录内的文件?

如何使用 nginx 对目录进行密码保护,但不保护目录内的文件?

我知道这可以通过 Apache 来完成,但是我已经开始使用 nginx 并想知道这是否可行,如果可行,我该如何实现它。

在我的 Web 服务器上,我有一个目录 /mcscreens,其中包含许多图像。该目录的索引为h5ai。我想用密码保护目录,这样我就可以访问 /mcscreens、登录并能够使用 h5ai 浏览所有图像。不过,我还想将人们直接链接到特定图像,而无需他们进行身份验证。

基本上,我想用密码保护目录,但是不是单个文件。

我怎样才能做到这一点?

编辑:我的完整配置,包括 rmalayter 的示例:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www;
    index index.php index.html index.htm /mcscreens/_h5ai/server/php/index.php;

    # Make site accessible from http://localhost/
    server_name redacted;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }

    #location for the root folder listing with or without trailing slash
    location ~ ^/(mcscreens|mcscreens/)$  {
      auth_basic            "Restricted";
      auth_basic_user_file  /var/www-assets/passwd;
    }

    #allow retrieval of any individual image via URL without auth
    location ~ ^/mcscreens/* {
      autoindex off;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }
}

rmalayter 的示例有效,但是 PHP 文件被下载为 .bin 文件。

答案1

我相信这可以通过两个位置块来实现,一个用于启用自动索引的文件夹本身,另一个用于其中的文件。这些可能必须是正则表达式 locationS。

未经测试的示例:

#location for the root folder listing with or without trailing slash
location ~ ^/(mcscreens|mcscreens/)$  {
  auth_basic            "Restricted";
  auth_basic_user_file  htpasswd;
  autoindex on;
}

#allow retrieval of any individual image via URL without auth
location ~ ^/mcscreens/* {
  autoindex off;
}

相关内容