Nginx — PHP-скрипт с защитой паролем

Как я могу защитить паролем один скрипт php php в Nginx. Я использую nginx в качестве веб-сервера и проксирую php-fastcgi. Я не могу заставить блоки местоположения вести себя так, как ожидалось.

Вот фрагмент того, что я пытаюсь.

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;
}

person gngrwzrd    schedule 30.11.2010    source источник


Ответы (2)


Первая проблема:

Вы сопоставляете строку префикса вместо регулярного выражения:

  1. Строка префикса соответствует буквально.
  2. Даже если строка префикса совпадает, поиск продолжается с приведенным ниже регулярным выражением (~\.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 документы по теме.

person simlev    schedule 16.01.2019

location /admin\.php$ {
    auth_basic "Valid User Required";
    auth_basic_user_file /etc/nginx/http-auth;
+    root /var/www/nginx/vhosts/site;
+    include /etc/nginx/fastcgi_params;
+    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+    fastcgi_pass phpfcgi;
}

Может быть, это поможет вам.

person CyberDem0n    schedule 01.12.2010