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

Почему Nginx не может повторно использовать соединение с восходящим потоком при обслуживании последовательных запросов от клиентов?

Как упоминалось в http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive

Следует особо отметить, что директива keepalive не ограничивает общее количество подключений к вышестоящим серверам, которые рабочий процесс Nginx может открыть. Параметр соединений должен быть установлен на достаточно маленькое число, чтобы серверы вышестоящего потока также обрабатывали новые входящие соединения.

Я хочу понять, если приходит новый клиент, почему он не может использовать существующие соединения keep-alive?

Нужно ли Nginx создавать новое соединение с апстримом каждый раз, когда приходит новый клиент?

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

Кроме того, обратите внимание на предложение, предшествующее тому, которое вы цитируете. http://nginx.org/r/keepalive:

Параметр connections устанавливает максимальное количество неактивных соединений keepalive с вышестоящими серверами, которые сохраняются в кэше каждого рабочего процесса. При превышении этого числа самые последние использованные соединения закрываются.

Обратите внимание на часть «каждый рабочий процесс». Я бы предположил, что если соединение (с новым клиентским запросом) входит в рабочий процесс, у которого уже прошло количество поддерживающих активность соединений с данным сервером, то новый все равно будет открыт, даже если какой-то другой рабочий у процессов все еще есть некоторые из их соединений keepalive с тем же вышестоящим сервером, которые все еще неактивны.

Если вам нужно больше деталей, возможно, стоит покопаться в ngx_http_upstream_keepalive_module.c.