7 советов по настройке производительности NGINX

nginx [engine x] - это HTTP и обратный прокси-сервер, почтовый прокси-сервер и общий TCP/UDP прокси-сервер, первоначально написанный Игорем Сысоевым. Долгое время он работал на многих высоконагруженных российских сайтах, включая Яндекс, Mail.Ru, VK и Rambler.

Совет 1 - Настройте рабочие процессоры и рабочие соединения

Архитектура Nginx состоит из одного главного процессора и нескольких рабочих процессоров. Задача главного процессора - считывать и оценивать конфигурацию, а также управлять рабочими процессорами. Работа рабочего процессора заключается в обработке запросов и установлении соединения между клиентом и сервером.

По умолчанию значение этого параметра установлено на auto (рекомендуется), и он устанавливает количество рабочих процессов в соответствии с количеством доступных ядер CPU в системе. Однако, если на ваш веб-сервер Nginx поступает больше трафика и если вам требуется больше процессоров, то рекомендуется обновить вашу машину до большего количества ядер и перенастроить рабочие процессы в соответствии с новым количеством ядер CPU в вашей системе.

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

Затем мы можем внести изменения в параметр "worker_processes" в файле /etc/nginx/nginx.conf

Рабочие соединения (worker_processes) - это максимальное количество соединений (TCP-сессий), которые каждый рабочий процесс может обрабатывать одновременно. Увеличивая это число, мы можем повысить производительность каждого рабочего процесса. При объединении рабочих процессоров и рабочих соединений вместе, вы получаете максимальное количество клиентов, которые могут быть обслужены в секунду.

Максимальное количество клиентов/секунду = Рабочие процессы * Рабочие соединения

По умолчанию это 512, но большинство систем имеют достаточно ресурсов для поддержки большего числа, а большинство веб-браузеров открывает как минимум два соединения на сервер, это число может уменьшиться вдвое.

Следующая команда скажет вам, сколько открытых файлов ваша система позволяет использовать процессу.

Поэтому максимальное число для настройки рабочих соединений - 1024, и лучше всего использовать это значение, чтобы получить полный потенциал от Nginx.

Давайте обновим основной конфиг /etc/nginx/nginx.conf

Совет 2 - Включение сжатия Gzip

Gzip - это известное программное приложение, используемое для сжатия и распаковки файлов. Оно может помочь уменьшить объем сетевой передачи, с которой имеет дело Nginx. Включение gzip позволяет сэкономить пропускную способность и улучшить время загрузки сайта на медленных соединениях.
В настоящее время большинство клиентов и серверов поддерживают приложение gzip. Когда gzip-совместимый клиент/веб-браузер запрашивает ресурс у сервера с поддержкой Gzip, сервер сжимает ответ перед отправкой обратно клиенту. Это отличный способ оптимизировать работу сервера Nginx и управлять запросами еще более эффективно.

Общая конфигурация Gzip-сжатия может выглядеть следующим образом. Откройте файл /etc/nginx/nginx.conf
и добавьте следующие директивы внутри блока server.

Вот объяснение конфигурации, строка за строкой:

  • gzip on; - Включает сжатие gzip.
  • gzip_vary on; - Указывает прокси кэшировать как gzip, так и обычную версию ресурса.
  • gzip_min_length 1024; - Сообщает NGINX не сжимать ничего, что меньше определенного размера.
  • gzip_proxied; - Сжимать данные даже для клиентов, подключающихся через прокси (здесь мы включаем сжатие, если: заголовок ответа включает параметры "expired", "no-cache", "no-store", "private" и "Authorization").
  • gzip_types; - Включает типы файлов, которые могут быть сжаты.
  • gzip_disable ; - "MSIE [1-6]\."; - отключить сжатие для Internet Explorer версий 1-6.

Совет 3 - Изменение длительности кэширования статического контента на Nginx

Статический контент - это содержимое сайта, которое остается неизменным на всех страницах. Например, это такие файлы, как медиафайлы, документы, CSS и JS файлы. Кэширование - это механизм хранения файлов частого доступа в легкодоступных местах. Включение кэширования позволяет снизить пропускную способность и повысить производительность сайта. Когда запрос клиента поступает на ваш сайт, кэшированная версия будет предоставлена, если она не изменилась с момента последнего кэширования. В главный конфигурационный файл Nginx можно добавить следующие директивы, чтобы указать компьютеру кэшировать статические файлы веб-страницы для более быстрого доступа.

Добавьте следующий раздел в файл /etc/nginx/sites-available/domainname.conf
файл vhost.

В этом примере все файлы .jpg, .jpeg, .png, .gif, .ico, .css и .js получают заголовок Expires с датой 365 дней в будущем от времени доступа браузера.

Совет 4 - Измените размер буферов

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

Ниже перечислены параметры, которые необходимо настроить в файле /etc/nginx/nginx.conf
для оптимальной производительности:

  • client_body_buffer_size - Задает размер буфера для чтения тела запроса клиента. Если тело запроса больше буфера, то все тело или только его часть записывается во временный файл.
  • client_header_buffer_size - Указывает размер буфера относительно заголовка клиентского запроса.
  • client_max_body_size - Устанавливает максимально допустимый размер тела клиентского запроса, указанный в поле заголовка запроса "Content-Length". Если размер в запросе превышает настроенное значение, клиенту возвращается ошибка 413 (Request Entity Too Large).
  • large_client_header_buffers - Максимальное количество и размер буферов для больших клиентских заголовков. Строка запроса не может превышать размер одного буфера, иначе клиенту будет возвращена ошибка 414 (Request-URI Too Large).

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

Совет 5 - Сокращение тайм-аутов

Таймауты также значительно повышают производительность Nginx. Соединения keepalive уменьшают затраты процессора и сети на открытие и закрытие соединений.

Ниже перечислены параметры, которые необходимо настроить в файле /etc/nginx/nginx.conf для оптимальной производительности:

  • client_header_timeout - Определяет таймаут для чтения заголовка запроса клиента. Если клиент не передает весь заголовок в течение этого времени, запрос завершается с ошибкой 408 (Request Time-out).
  • client_body_timeout - Определяет тайм-аут для чтения тела запроса клиента. Таймаут устанавливается только для периода между двумя последовательными операциями чтения, а не для передачи всего тела запроса. Если клиент ничего не передает в течение этого времени, запрос завершается с ошибкой 408 (Request Time-out).
  • keepalive_timeout - Время, в течение которого клиентское соединение keep-alive будет оставаться открытым на стороне сервера.
  • send_timeout - Устанавливает тайм-аут для передачи ответа клиенту. Если в течение этого времени клиент ничего не получит от сервера, соединение будет закрыто.

Совет 6 - Отключение журналов доступа (если требуется)

Ведение журнала очень важно при устранении неполадок и для аудита. Однако, если включить ведение журнала, он будет занимать большой объем дискового пространства и использовать больше циклов CPU/IO, что снижает производительность сервера, поскольку он регистрирует каждый запрос Nginx, поступающий на сервер.

Есть два варианта решения этой проблемы.

Полностью отключить ведение журнала доступа, что сэкономит дополнительную обработку данных и место на жестком диске.

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

В качестве альтернативного решения вы можете использовать решения с открытым исходным кодом, такие как ELK stack и другие, которые централизуют все журналы для вашей системы.

Совет 7 - Настройте поддержку HTTP/2

HTTP/2 является преемником сетевого протокола HTTP 1.x. HTTP/2 широко используется для снижения задержки, минимизации накладных расходов протокола и добавления поддержки приоритезации запросов, что позволяет веб-приложениям загружаться намного быстрее. Следовательно, жизненно важно оставаться в курсе техники и стратегии оптимизации производительности. Основным направлением HTTP/2 является сокращение общего времени загрузки веб-страниц, что позволяет оптимизировать производительность.

Он также фокусируется на использовании ресурсов сети и сервера, а также на повышении безопасности, поскольку в HTTP/2 шифрование SSL/TLS является обязательным.

В качестве предварительного условия убедитесь, что версия Nginx - 1.9.5 или выше, поскольку он построен с модулем ngx_http_v2_module, иначе вам придется добавить его вручную, а сервер должен включить SSL/TLS.

Теперь ваш блок HTTPS сервера должен выглядеть следующим образом:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий