Hello! On Mon, Jan 04, 2021 at 04:59:53PM +0200, Gena Makhomed wrote:
> В документации написано, что значение по-умолчанию > для директивы worker_connections равно 512. > > Значение директивы worker_connections равное 512 > дает всего лишь 256 одновременных подключений к бекенду. > > И там же в документации нарисован пример, > увеличивающий worker_connections до 2048. > > Не совсем понятно, чем вызвано такое маленькое значение > для директивы worker_connections указано по-умолчанию. > > worker_connections 512 - это явно не оптимальное значение. > > Ведь даже в дефолтовом конфиге nginx.conf, который поставляется > с nginx указано в два раза большее значение: worker_connections 1024; На некоторых операционных системах 1024 уже упирается в ограничение ОС, поэтому по умолчанию используется 512. При этом даже минимальное значение по умолчанию - в разы больше, чем MaxClients (MaxRequestWorkers) в каком-нибудь Apache, так что нет повода считать, что оно слишком маленькое. Скорее, тут вопрос в том, что сам nginx позволяет существенно больше. Но это уже отдельный вопрос, который в первую очередь упирается в грамотную настройку операционной системы. > Каким способом можно подобрать наиболее оптимальное значение > для директивы worker_connections - так чтобы nginx не упирался > в этот лимит даже в случае DDoS-атак на сервер и в то же время, > чтобы память зря не расходовалась? В первую очередь стоит отталкиваться от того, какое максимальное количество соединений может держать операционная система с конкретными настройками. И настраивать nginx так, чтобы он таки _упирался_ в worker_connections чуть раньше, чем операционная система упрётся в свои ограничения (или nginx упрётся в ограничения операционной системы). Потому что: 1. Если первой упрётся операционная система - то может статься, что операционную систему мы потеряем. 2. А если nginx упрётся в какой-нибудь лимит по max files - то он не сможет принимать входящие соединения вообще, и даже их сразу закрывать после этого, и в то же время accept() будет всегда сообщать о новых соединениях. Как-то игнорировать такое, периодически ругаясь в логи, nginx с некоторых пор умеет, но это категорически неправильный режим работы. 3. При приближении к исчерпанию worker_connections nginx умеет закрывать keepalive-соединения, которые дольше всего не использовались, тем самым снижая нагрузку. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru