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

'Файл не найден' точный путь в nginx и php-fpm

Иногда при настройке nginx и php-fpm я получаю сообщение «Файл не найден». Я знаю, что это из-за неправильного параметра SCRIPT_FILENAME, например:

fastcgi_param   SCRIPT_FILENAME  /some/path$fastcgi_script_name;

Интересно, есть ли способ получить точный полный путь к файлу, который не может быть найден php-fpm?

В моем php5-fpm.log ничего нет, но:

[06-Jan-2014 11:14:33] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful
[06-Jan-2014 11:27:01] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful

Я пытался изменить log_level вариант в php-fpm.conf для error и debug, но результат остается прежним

P.S. Эта строка:

add_header X-My-Header /some/path$fastcgi_script_name;

не помогает, потому что add_header работает только с успешными ответами, как я читал Вот

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

Спасибо.

Решением будет регистрация необходимых переменных nginx с использованием log_format.

В простейшем случае это может выглядеть так (вставьте этот код в http контекст):

log_format mylog '$fastcgi_script_name';
access_log  /var/log/nginx/access.log  mylog;

Затем вы можете увидеть результаты в файле журнала доступа (в моем случае /var/log/nginx/access.log).

Другое решение - скомпилировать nginx с HttpHeadersMoreModule. Этот модуль позволяет вам манипулировать заголовками http с гораздо большей гибкостью, чем при использовании по умолчанию nginx add_header директива. Итак, чтобы просмотреть $fastcgi_script_name значение можно написать:

location ~ \.php$ {
    more_set_headers    "x-debug-header: $fastcgi_script_name";
    fastcgi_pass        127.0.0.1:9000;
    ...
}

Затем вы можете увидеть заголовки в Google Chrome DevTools на вкладке «Сеть» (или в аналогичных инструментах в других браузерах).

P.S. с HttpHeadersMoreModule вы также можете переписать Server заголовок, если конечно нужно:

more_set_headers    "Server: my_server";

Удачи!