Первый выпуск:
Вы соответствуете строке префикса вместо регулярного выражения:
- Строка префикса соответствует буквально.
- Даже если строка префикса совпадает, поиск продолжается с помощью регулярного выражения ниже (
~\.php$
). Если это совпадает, совпадение строки префикса игнорируется.
Решение проблемы № 1:
Добавьте ~
для сопоставления с регулярным выражением: ~/admin\.php$
.
Второй выпуск:
Теперь, когда ваш блок совпадает, вы хотите передать php-скрипты внутри него в fastcgi, иначе они будут использоваться как текстовые файлы без разбора.
Решение проблемы № 2:
Вложите блок местоположения ~\.php$
внутри блока местоположения ~/admin\.php$
, чтобы получить конечный результат, показанный ниже:
location ~/admin\.php$ {
auth_basic "Valid User Required";
auth_basic_user_file /etc/nginx/http-auth;
location ~\.php$ {
root /var/www/nginx/vhosts/site;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass phpfcgi;
}
}
location ~\.php$ {
root /var/www/nginx/vhosts/site;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass phpfcgi;
}
Справка:
См. Этот пост , ответ о приоритете блоков местоположения и Nginx docs по теме.