Перестанет ли nginx отправлять трафик на неотвечающие серверы php?

Мы запускаем веб-сайт на AWS с определенной настройкой: ELB разделяет нагрузку на 2 экземпляра t2.medium, на которых запущен nginx. Оттуда трафик PHP разделяется на 2 потока (внешний интерфейс и API), как для внутренних ELB, выходящих на наши серверы PHP. Для справки, у нас есть 2 внешних сервера PHP (t2.medium) и 3 сервера API PHP (m4.large). Все они используют одну и ту же версию PHP-FPM на порту 9000.

Все работало отлично еще несколько дней назад. По какой-то причине, которую еще предстоит определить, трафик на серверах PHP API просто умирает, и только перезапуск nginx возвращает его к жизни.

Мы предполагаем, что у нас может быть какой-то длительный процесс, из-за которого один из серверов PHP становится занят, и оттуда все идет под откос. Однако загрузка ЦП на всех серверах PHP довольно постоянна, пока они не перестанут отвечать. PHP-FPM все еще работает, и нагрузка на серверы ngnix все еще очень низкая. От клиентов получено 504 ответа, и вот что я вижу в журнале ошибок nginx: 04.10.2016 14:34:25 [ошибка] 17661 # 0: * 2309784 connect () не удалось (113: нет маршрута к хосту) при подключении к восходящему потоку, клиент: xxx.xxx.xxx.xxx, сервер : api.mywebsite.com, запрос: «GET / some / route HTTP / 1.1», восходящий поток: «fastcgi: // internalip: 9000», хост: «api.mywebsite.com»

nginx.conf

worker_processes 4;
worker_connections 19000;

nginx site conf

location ~ \.php$ {
    try_files $uri =404;

    fastcgi_buffer_size 512k;
    fastcgi_buffers 16 256k;
    fastcgi_busy_buffers_size 1024k;

    include fastcgi_params;

    fastcgi_pass route53-php:9000;
    fastcgi_index index.php;

    fastcgi_param REQUEST_URI /api$request_uri;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

www.conf

listen = 9000
pm = dynamic
pm.max_children = 50
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 25
pm.max_requests = 500

Поскольку настройка далеко не тривиальна, мне интересно, правильно ли настроен блок местоположения PHP. Это также может быть размер используемых серверов, но загрузка ЦП очень низкая.

1
задан 4 October 2016 в 18:50
1 ответ

Правильно, так что получается, что это обычная проблема, когда nginx разговаривает с AWS внутренней ELB. После еще немного погуглив, я нашел этот вопрос: Некоторые реверсные прокси-конфигураторы nginx перестают работать раз в день и добавление резольвера помогло - у меня уже 3 дня не было простоя.

Интересно также отметить, что в каждой найденной мною статье речь идет о proxy_pass, но и с fastcgi_pass, похоже, тоже неплохо работает.

Надеюсь, это кому-нибудь поможет в той же ситуации!

0
ответ дан 4 December 2019 в 05:47

Теги

Похожие вопросы