В основном я пытаюсь включить модуль аутентификации при доступе к определенной части поддомена, которые 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;
}