Я пытаюсь настроить файл конфигурации postfixadmin nginx с вложенными расположениями и застрял с проблемой передачи правильного SCRIPT_FILENAME в php -fpm бэкэнда.
URL, которые должны передается, когда сценарии postfixadmin начинаются с URL / postfixadmin. Часть моего конфигурационного файла, которая обслуживает файлы / postfixadmin, выглядит следующим образом
location ~ ^\/postfixadmin.*(\.php|\.css|\.png|\.gif) {
location ~ (.*\.php)$ {
alias /var/www/postfixadmin/public/;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param QUERY_STRING $query_string;
fastcgi_pass 127.0.0.1:9000;
proxy_read_timeout 500;
}
}
И проблема в этом месте
location ~ (.*\.php)$ {
Что я хочу сделать, это обслуживать все usrl, связанные с / postfixadmin и с расширением ". php" как php сценариев и перехват имени сценария как переменная $ 1. Но на самом деле, когда я пытаюсь получить доступ к URL /postfixadmin/index.php, я получаю следующий заголовок
HTTP/1.1 404 Not Found
Server: nginx/1.16.1
Date: Sun, 19 Jan 2020 10:56:13 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.4.1
Так что, как вы можете видеть nginx, правильно выберите местоположение
location ~ ^\/postfixadmin.*(\.php|\.css|\.png|\.gif) {
А затем nginx видит. php в конце URL и пытается отправить это в php -fpm бэкэнд. Но php -fpm отвечает с кодом статуса 404. И это происходит из-за пустого SCRIPT_FILENAME .
Возможно, я ошибаюсь, но я думаю, что проблема в этом месте
location ~ (.*\.php)$ {
Потому что, когда я делаю, это выглядит так , все работает нормально, и я могу передать переменную $ 1 (как имя скрипта) в php -fpm бэкэнд.
location ~ .*\/(.*\.php)$ {
Но указывать. * / перед расположением не имеет смысла (потому что я хочу указать только расширение с именем скрипта) и я просто пытаюсь понять, как это сделать правильно.
Спасибо