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