У меня есть сервер на 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.