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

Как работает прокси-сервер nginx websocket?

Мне интересно, как nginx обрабатывает тонны активных подключений к веб-сокетам? Существует множество ограничений, таких как количество открытых файлов, максимум 65k TCP-соединений между IP <-> (IP, порт) и т. Д.

Когда я использую nginx в качестве обратного прокси и имею, скажем, 5 узлов в восходящем потоке веб-сокета, существует ли до 65 тыс. Активных TCP-соединений между nginx и каждым узлом? Конечно, если у меня более 300 тыс. Активных клиентов, обслуживаемых nginx. Или прокси nginx websocket работает по другому?

И еще один вопрос: какие параметры (ограничения) я должен настроить, чтобы обрабатывать такое количество подключений?

Вы все поняли правильно, но ваш реальный предел - это дескрипторы файлов. Каждое соединение через сокет требует дескриптора файла Linux, и ulimit по умолчанию для них равен 1024. / proc / sys / fs / file-max устанавливает ограничение для всей системы. Вам нужно будет поднять эти ограничения, чтобы поддерживать высокую скорость соединения nginx.

Ребята из NGINX протестировали до 50 000 подключений на шестиядерном сервере:

https://www.nginx.com/blog/nginx-websockets-performance/

Реальность такова, что если вам нужны десятки тысяч подключений в реальном мире, вам нужно перейти к нескольким обратным прокси-серверам за циклическим DNS. Так, например, работает Amazon Elastic Load Balancer. Если вы найдете что-то в облаке AWS, например Slack.com, и наберете nslookup slack.com, вы получите длинный список IP-адресов. Введите его еще раз, и вы получите другой список с повернутыми IP-адресами, так что другой будет во главе списка. Это обратные прокси Amazon AWS ELB () в DNS с циклическим перебором, которые перенаправляют запросы на фактические серверы приложений. Самой сложной частью на этом этапе становится управление регистрацией и отменой регистрации обратных прокси-серверов в DNS по мере их появления и ухода или управление захватом IP-адреса, если это то, что вы намереваетесь сделать. Серьезные проблемы, и поэтому я использую решение Amazon, а не собственное.