Как я могу защитить паролем каталог с помощью nginx, но не файлы внутри каталога?
Я знаю, что это можно сделать с помощью Apache, однако я начал использовать nginx и хотел бы знать, возможно ли это, и если да, то как я могу это реализовать.
На моем веб-сервере у меня есть каталог /mcscreens, который содержит несколько изображений. Каталог индексируется с помощью h5ai. Я хотел бы защитить каталог паролем, чтобы я мог посетить /mcscreens, войти в систему и иметь возможность просматривать все изображения с помощью h5ai. Я также хотел бы, однако, связать людей непосредственно с определенными изображениями, без их аутентификации.
По сути, я хочу защитить каталог паролем, а не отдельными файлами.
Как я могу это сделать?
edit: мой полный конфиг, включая пример 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 ответ
Я полагаю, что это может быть достигнуто с помощью двух блоков местоположения, один для самой папки, на которой включен автоиндекс, а затем один для файлов внутри. Вероятно, это должны быть регулярные выражения.
Непроверенный пример:
#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;
}