Оптимальная настройка Nginx

Thank you for reading this post, don't forget to subscribe!

В стан­дарт­ной кон­фи­гу­ра­ции Nginx может рабо­тать при очень боль­ших нагруз­ках. Тем не менее, эффек­тив­ность его рабо­ты мож­но зна­чи­тель­но повы­сить, настро­ив его пара­мет­ры. Такая настрой­ка назы­ва­ет­ся тюнинг (tuning — под­строй­ка, регулировка).

Как настраивать и тюнинговать Nginx

Обыч­но кон­фи­гу­ра­ци­он­ный файл назы­ва­ет­ся nginx.conf. Его мож­но найти:

Debian

Freebsd

Файл настро­ек обыч­но выгля­дит так:

Оптимизация параметров

Обработка соединений

Мак­си­маль­ное коли­че­ство соеди­не­ний, кото­рые Nginx может обслу­жи­вать одно­вре­мен­но опре­де­ля­ют­ся про­из­ве­де­ни­ем двух параметров:

# Опре­де­ля­ет коли­че­ство рабо­чих про­цес­сов. Его луч­ше уста­нав­ли­вать в auto в новых версиях.

# Уста­нав­ли­ва­ет мак­си­маль­ное коли­че­ство соеди­не­ний одно­го рабо­че­го про­цес­са. Сле­ду­ет выби­рать зна­че­ния от 1024 до 4096.

Дирек­ти­ва use уста­нав­ли­ва­ет метод выбо­ра соеди­не­ний. Для раз­ных опе­ра­ци­он­ных систем нуж­но исполь­зо­вать раз­ные методы.

Linux

Freebsd

По умол­ча­нию, Nginx поста­ра­ет­ся выбрать наи­бо­лее эффек­тив­ный метод самостоятельно.

Обработка запросов

# Будет при­ни­мать мак­си­маль­но воз­мож­ное коли­че­ство соединений

# Метод отправ­ки дан­ных sendfile более эффек­ти­вен, чем стан­дарт­ный метод read+write

# Будет отправ­лять заго­лов­ки и и нача­ло фай­ла в одном пакете

Информация о файлах

Nginx уме­ет кеши­ро­вать инфор­ма­цию о фай­лах, с кото­ры­ми ему при­хо­дит­ся рабо­тать (напри­мер, css сти­ли или кар­тин­ки). Если к таким фай­лам про­ис­хо­дит мно­го обра­ще­ний, кеши­ро­ва­ние может зна­чи­тель­но уско­рить этот процесс.

# Опре­де­ля­ет мак­си­маль­ное коли­че­ство фай­лов, инфор­ма­ция о кото­рых будет содер­жать­ся в кеше

# Опре­де­ля­ет через какое вре­мя инфор­ма­ция будет уда­ле­на из кеша

# Будет кеши­ро­вать инфор­ма­цию о тех фай­лах, кото­рые были исполь­зо­ва­ны хотя бы 2 раза

# Будет кеши­ро­вать инфор­ма­цию об отсут­ству­ю­щих файлах

Логирование

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

Сжатие Gzip

Обя­за­тель­но нуж­но исполь­зо­вать сжа­тие, это зна­чи­тель­но умень­шит тра­фик. Про­ве­рить, вклю­че­но ли сжа­тие, мож­но с помо­щью Gzip checker.

# Будет сжи­мать все фай­лы с пере­чис­лен­ны­ми типами

Обработка клиентов

Keepalive соеди­не­ния поз­во­ля­ют избе­жать необ­хо­ди­мо­сти повтор­но­го созда­ния соеди­не­ния меж­ду кли­ен­том и сервером.

# Будет ждать 30 секунд перед закры­ти­ем keepalive соединения

# Мак­си­маль­ное коли­че­ство keepalive запро­сов от одно­го клиента

Мно­го про­блем могут создать мед­лен­ные (тупя­щие) кли­ен­ты. Мед­лен­ная пере­да­ча тела запро­са от кли­ен­та к сер­ве­ру и неожи­дан­ное закры­тие кли­ен­том соеди­не­ний могут создать боль­шое коли­че­ство лиш­них соеди­не­ний на сервере.

# Если кли­ент пере­стал читать отве­чать, Nginx будет сбра­сы­вать соеди­не­ние с ним

# Будет ждать 10 секунд тело запро­са от кли­ен­та, после чего сбро­сит соединение

# Если кли­ент пре­кра­тит чте­ние отве­та, Nginx подо­ждет 2 секун­ды и сбро­сит соединение

Огра­ни­чи­вай­те отправ­ку боль­ших запро­сов на сер­вер (напри­мер, загруз­ку боль­ших фай­лов), если это не преду­смот­ре­но сайтом.

# В этом слу­чае сер­вер не будет при­ни­мать запро­сы раз­ме­ром более 1Мб

После прав­ки настро­ек необ­хо­ди­мо выпол­нить перезагрузку:

Вся конфигурация

[codesyntax lang="php"]

[/codesyntax]

Самым боль­шим эффек­том на посе­ти­те­лей ока­жет вклю­че­ние сжа­тия gzip.