Как установить условие использования auth_basic?

#nginx

Вопрос:

Мне нужно настроить Nginx конфигурацию моего сайта так, чтобы пароль отображался только на моем сервере разработки. Фактически, я использую, CI/CD какое приложение развертывается Docker в рабочей среде, но мне не нужно показывать пароль в рабочей среде.

Сервер разработки обычно заканчивается определенным доменом, например: appname.example.com .

Есть ли способ показать аутентификацию только в процессе разработки?

Это моя конфигурация:

 server {
    root   /var/www/html/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;

        auth_basic "Restricted Content";
        auth_basic_user_file /var/www/html/public/.htpasswd;
    }

    location ~ [^/].php(/|$) {

        fastcgi_split_path_info ^(. ?.php)(/.*)$;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

        fastcgi_pass   php-upstream;
        fastcgi_index  index.php;
    }
}
 

Заранее спасибо.

Ответ №1:

Вы можете использовать map блок для получения auth_basic аргумента директивы из значения $host переменной:

 map $host $realm {
    appname.example.com  "Resticted content";
    default              off;
}

server {
    root   /var/www/html/public;
    index index.php;

    auth_basic $realm;
    auth_basic_user_file /var/www/html/public/.htpasswd;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ [^/].php(/|$) {
        ...
    }
}
 

Вы можете использовать выражения регулярных выражений с map директивой, используя ~ модификатор, например

 map $host $realm {
    ~appname.example.com$  "Resticted content";
    default                  off;
}