Иногда при настройке 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";
Удачи!