LINUX.ORG.RU
ФорумAdmin

Почти классика жанра - эпизодическая ошибка 502

 ,


0

2

Всем привет!

Есть Nginx + PHP-FPM на CentOS 5.6. Поверх работают несколько Web-проектов, в том числе продуктивных, но на одном тестовом проекте эпизодически, но заметно для тестировщиков выскакивает ошибка 502. В логах это выглядит примерно следующим образом.

Лог доступа:

198.51.100.30 - secretuser [30/Jul/2012:00:57:06 -0700] «POST /json-rpc.php?version=1&token=6f0023c00cf1d7cf314eabcd7398165ccab298a3 HTTP/1.1» 502 191 "-" "-"

198.51.100.30 - secretuser [30/Jul/2012:06:18:10 -0700] «POST /json-rpc.php?version=1&token=4a96eb465d098d5f5b5d62aef3d4ee777d0c2539 HTTP/1.1» 502 191 "-" "-"

Лог ошибок:

2012/07/30 00:57:06 [error] 12760#0: *199780 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 198.51.100.30, server: testing.example.com, request: «POST /json-rpc.php?version=1&token=6f0023c00cf1d7cf314eabcd7398165ccab298a3 HTTP/1.1», upstream: «fastcgi://unix:/var/run/php-fpm/php-fpm.socket:», host: «testing.example.com»

2012/07/30 06:18:10 [error] 30872#0: *206751 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 198.51.100.30, server: testing.example.com, request: «POST /json-rpc.php?version=1&token=4a96eb465d098d5f5b5d62aef3d4ee777d0c2539 HTTP/1.1», upstream: «fastcgi://unix:/var/run/php-fpm/php-fpm.socket:», host: «testing.example.com»

Подскажите, куда копать или какие решения попробовать.

Заранее благодарен.

Если по порядку, то:

recv() failed (104: Connection reset by peer) while reading response header from upstream
Соединение было сброшено при попытке чтения ответа (заголовков) из upstream.
upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.socket:"
А вот и он.

Итого: nginx намекает, что что-то не то с этим fpm. Сегфолтится? Мало процессов запущено?

какие решения попробовать

Без fpm как-то так:

nohup env - PHP_FCGI_CHILDREN=100 PHP_FCGI_MAX_REQUESTS=10000 php-cgi -q -b /var/run/php-fpm/php-fpm.socket

fjoe ()
Ответ на: комментарий от Alexander7

Может быть у тебя на том проекте php-скрипты дюже задумчивые, и отваливаются по таймауту? Посмотри в сторону fastcgi_*_timeout в конфигах nginx.

anon8 ()

Автор, посмотри лог php-fpm. Может, ему кол-ва разрешенных детей в пуле не хватает. Можешь также перенаправить в syslog мессаги от php, тоже интересно.

Bers666 ★★★★★ ()

В чем преимущество использования unix-socket перед tcp-socket? Неоднократно слышал, что под Linux использование php-fpm с unix-socket может приводить к потере соединения.

zorgan ()
Ответ на: комментарий от zorgan

ни в чем. Но есть нюанс. Например на Openvz есть лимиты, и иногда они превышаются. Так вот вероятность превысить лимит на кол-во tcp соединений намного выше, чем лимит на кол-во unix socket-ов. Поэтому в этом случае лучше сделать unix socket между nginx и php-fpm.

Bers666 ★★★★★ ()
3 ноября 2012 г.

proxy_http_version

я бы рекомендовал посмотреть на директиву proxy_http_version http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version

у меня была похожая проблема заключалась в том что по умолчанию nginx ниже 1.1.24 версии общается с бекендом по http 1.0, а бекенд пытается отдать заголовки http 1.1 - cобственно о чем у вас и говорится в логах

anonymous ()
24 апреля 2013 г.

Я так и не понял, проблема разрешилась ? Если да то как ?

s9gf4ult ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.