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

Nginx + PHP FASTCGI FAILS - как отлаживать?

У меня есть сервер на AMAZON EC2 под управлением Nginx + PHP с PHP FASTCGI через порт 9000.

Сервер работает нормально в течение нескольких минут, а через некоторое время (в данном случае несколько тысяч совпадений) FastCGI умирает, а Nginx возвращает ошибку 502.

Журнал Nginx показывает

 2010/01/12 16:49:24 [error] 1093#0: *9965 connect() failed (111: Connection refused) while connecting to upstream, client: 79.180.27.241, server: localhost, request: "GET /data.php?data=7781 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site1.mysite.com", referrer: "http://www.othersite.com/subc.asp?t=10"

Как я могу отладить причину смерти FastCGI?

Я понимаю, что OP, возможно, к настоящему времени ушел, но если кто-то пришел сюда с той же проблемой, я надеюсь, что это поможет.


В настройках по умолчанию NGINX запускается от имени пользователя «никто», тогда как spawn-fcgi порождает дочерние элементы php-cgi от имени пользователя «root». Итак, NGINX не может подключиться к fastcgi: //127.0.0.1: 9000 с текущими разрешениями. Все, что вам нужно сделать, это немного изменить команду spawn-fcgi, чтобы исправить это.

spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi -C 5 -U nobody

Или вы можете использовать сокет UNIX (я предпочитаю этот метод)

spawn-fcgi -s /var/run/fcgi.sock -f /usr/bin/php-cgi -C 5 -U nobody

И измените свой fastcgi_pass в nginx.conf на это:

...
 location ~ \.php$ {
        fastcgi_pass   unix:/var/run/fcgi.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_$
    }
...

Вы можете начать с изучения того, что PHP печатает при стандартной ошибке, когда умирает. Если это не проливает света на вопрос, тогда было бы полезно подключить к процессам PHP strace и посмотреть, как они делают свое дело, а затем посмотреть, что они делают в последний раз. Запуск ваших процессов FCGI в рамках компетентной системы мониторинга процессов, такой как DAEMON Tools тоже хорошая идея - так я запускаю все свои PHP-процессы под nginx.