Назад | Перейти на главную страницу

Аутентификация с определенными поддоменами

В основном я пытаюсь включить модуль аутентификации при доступе к определенной части поддомена, которые dev.domain.com и pma.domain.com, у них обоих должен быть загружен модуль аутентификации. Я не могу понять, почему мой файл конфигурации nginx не работает.

Во втором блоке сервера вы можете увидеть pma и dev с модулем аутентификации, когда я обращаюсь к pma.domain.com или dev.domain.com, Я не вижу ни модуля аутентификации, отображаемого в моем браузере, ни журналов ошибок.

В любом случае, мне просто нужно исправить, чтобы включить аутентификацию на этих двух поддоменах, а не полностью переписать мой файл конфигурации nginx.

server {

    server_name domain.com;

    root            /var/www/domain.com/www;
    index           index.php index.htm index.html;
    error_page      404 /404.html;
    error_page      500 502 503 504  /50x.html;

    access_log      /var/www/domain.com/logs/access.log;
    error_log       /var/www/domain.com/logs/errors.log;

    error_page 404  /index.php;

    location ~ \.php$ 
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/domain.com/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

server {

    server_name ~^(.+)\.domain\.com$;

    set $file_path $1;

    root            /var/www/domain.com/www/$file_path;
    index           index.html index.php;

    access_log      /var/www/domain.com/logs/access.log;
    error_log       /var/www/domain.com/logs/errors.log;

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

    location ~ pma
    {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
    }

    location ~ dev
    {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
    }

    location ~ \.php$ 
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/domain.com/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

Кто угодно?

Более простое решение - использовать карту

map $http_host $auth_type {
    default "off";
    example.domain.tld "Restricted";
}

server {
    auth_basic $auth_type;
}

Или

По состоянию на nginx 1.5.4+ модуль аутентификации:

http://nginx.org/en/docs/http/ngx_http_auth_request_module.html

Однако вам необходимо разделить эти два домена на отдельные серверные блоки и оставить замену подстановочными знаками для других или попытаться использовать обходной путь ниже.

1. Директива location работает только с URI, а не с заголовком хоста

2. А если попробовать сделать что-то вроде

if ($host ~ "(dev|pma).example.com" ) {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
}

тогда вы получите

ошибка nginx: [Emerg] директива auth_basic недопустима в .....

потому что директива auth_basic безусловна

обходной путь (не проверено):

    if ($host ~ "(dev|pma).example.com" ) {
        return 555;
    }

    error_page 555 = @auth;

    location @auth {
        auth_basic            "Website development";
        auth_basic_user_file  /var/www/domain.com/www/dev/authfile;
        try_files $uri /$uri /index.php?$args;
    }