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

Увеличивает ли использование fastcgi_keep_conn в nginx производительность для php-fpm?

Nginx документы говорят, что keepalive для fastcgi не может работать, если fastcgi_keep_conn не включен. Однако я не могу найти более подробной информации по этому поводу. У меня уже есть поддержка активности на сервере. Я использую php-fpm. Есть ли какие-нибудь проблемы с использованием fastcgi_keep_conn, о которых мне следует знать?

Теоретически fastcgi_keep_conn действительно увеличивает производительность, поскольку сокет между nginx и PHP-FPM остается открытым после обработки запроса. Таким образом экономится время, затрачиваемое на открытие розетки.

В целом это позволит сэкономить несколько миллисекунд на каждом запросе, поэтому не имеет такого большого эффекта.

Документация просто означает, что вам необходимо иметь как upstream блок с keepalive вариант и fastcgi_keep_conn в вашем блоке сценария PHP для работы поддержки активности соединения.

В принципе, fastcgi_keep_conn опция указывает nginx, чтобы PHP-FPM сохранял соединение открытым после запроса, а keepalive connection сообщает nginx, что соединение должно оставаться открытым.

Вам также необходимо установить keepalive_requests вариант вашего апстрима на тот же номер, что и ваш php-fpm pm.max_requests, иначе вы можете столкнуться с этой проблемой: https://stackoverflow.com/a/51457613/10115267

Обычно вы можете получать одну из следующих ошибок каждый раз при перезапуске дочернего процесса php-fpm из-за pm.max_requests достигается, пока к нему подключен nginx:

Ошибка readv () (104: сброс соединения одноранговым узлом) при чтении восходящего потока и recv () не удалось (104: сброс соединения одноранговым узлом) при чтении заголовка ответа из восходящего потока