Re: nginx не пишет в свои логи то, что передает FastCGI в stderr
Maxim Dounin
mdounin на mdounin.ru
Пт Мар 16 13:32:34 UTC 2012
Hello!
On Fri, Mar 16, 2012 at 09:16:05AM -0400, jekakm wrote:
> Вообще то так и должно быть. В
> нормальной ситуации nginx сообщения от
> fastcgi с stdout отправляет клиентам, а с stderr
> пишет в лог.
Нет, fastcgi работает по другому. С fastcgi-приложением сервер
(nginx) общается по одному сокету, в котором представлены
различные потоки данный, в частности - FCGI_STDOUT, FCGI_STDERR.
В которые приложение (php в вашем случае) должно перенаправить данные,
предназначающиеся в классическом CGI для stdout и stderr
соответственно.
Подробнее можно прочитать тут:
http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S5.3
> Все записи в логах nginx'а о
> ошибках в php начинаются с "FastCGI sent in stderr:",
> что как бы намекает.
Есть две вещи, которые не следует путать: stderr в его исходном
смысле (т.е. файл за номером 2 в рамках fastcgi-приложения)
и FCGI_STDERR stream, который и логгирует nginx.
Проблема в вашем случае, судя по всему, состоит именно в том, что
php _не_ отправляет данные в поток FCGI_STDERR, а просто пишет их
файл номер 2 aka stderr.
Убедиться в этом моторным методом достаточно просто - перевесить
fastcgi_pass на tcp-socket, и tcpdump'ом посмотреть поток.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru