Como posso proteger por senha um diretório com nginx, mas não os arquivos dentro do diretório?

1

Eu sei que isso pode ser feito com o Apache, no entanto eu comecei a usar o nginx e gostaria de saber se isso é possível e, em caso afirmativo, como posso implementá-lo.

No meu servidor web eu tenho o diretório / mcscreens que contém várias imagens. O diretório é indexado com h5ai . Eu gostaria de proteger o diretório com senha para que eu possa visitar / mcscreens, login e poder navegar por todas as imagens usando o h5ai. Eu também gostaria de vincular as pessoas diretamente a imagens específicas, sem que elas precisem autenticar.

Basicamente, eu quero proteger o diretório com senha, mas não arquivos individuais.

Como posso fazer isso?

edit: minha configuração completa, incluindo o exemplo do 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;

        }
}

O exemplo do rmalayter funciona, no entanto os arquivos PHP são baixados como arquivos .bin.

    
por Torvero 09.02.2014 / 22:50

1 resposta

3

Acredito que isso pode ser feito com dois blocos de localização, um para a própria pasta que possui o índice automático e um para os arquivos nele. Provavelmente, elas devem ser locais de regex.

Exemplo não testado:

#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;
}
    
por 10.02.2014 / 15:37