Это можно сделать с помощью директивы Nginx map
, которая позволяет установить переменную на основе другой переменной.
Где-то внутри вашего html-блока, но вне серверных блоков вы устанавливаете директиву map
map $cookie_trustedclient $mysite_authentication {
default "Your credentials please";
secret-cookie-value off;
}
Здесь происходит следующее: Nginx устанавливает значение пользовательской переменной $mysite_authentication
на основе значения файла cookie с именем trustedclient
.
По умолчанию $mysite_authentication
будет установлен на Your credentials please
, если только у вас нет файла cookie с именем trustedclient
со значением secret-cookie-value
, в этом случае $mysite_authentication
будет установлен на off
Теперь в пределах блока местоположения, в котором вы включили базовую аутентификацию, вы изменяете директиву auth_basic
на использование новой переменной, например:
location /secretfiles {
auth_basic $mysite_authentication;
auth_basic_user_file ....
add_header Set-Cookie "trustedclient=secret-cookie-value;max-age=3153600000;path=/";
}
Вы можете установить cookie здесь или в коде вашего сайта. В результате директива auth_basic
получает значение off
для людей с нужным файлом cookie или сообщение для поля пароля для пользователей без него.
Не супер-безопасный, но простой и достаточно хороший для большинства вещей.
Редактировать из вашей конфигурации:
# Map block can go here
map $cookie_trustedclient $mysite_authentication {
default "Your credentials please";
secret-cookie-value off;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# ssl on; # Delete this line, obsolete directive
ssl_certificate /etc/nginx/cloudflare-ssl/certificate.pem;
ssl_certificate_key /etc/nginx/cloudflare-ssl/key.key;
ssl_client_certificate /etc/nginx/cloudflare-ssl/cloudflare.crt;
ssl_verify_client on;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name ********.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# auth_basic "Restricted Content"; # Now this becomes:
auth_basic $mysite_authentication;
auth_basic_user_file /etc/nginx/.htpasswd;
add_header Set-Cookie "trustedclient=secret-cookie-value;max-age=3153600000;path=/";
}
}