• Записи 162
  • Теги 66
  • Комментарии 330

Компьютерное

Настройки для повышения производительности nginx

Почти два года назад запустил один из своих проектов на связке nginx+PHP-fpm, и теперь решил поделиться некоторыми настройками, позволяющими получить выигрыш в скорости работы.

Обработка статики


location ~* \.(css|js|gif|jpg|jpeg|png|ico|svg|ttf|otf|eot|woff|woff2)$ {
        expires 30d;
        access_log off;
    }
При этом nginx сам подберет подходящий заголовок (Expires для запросов по HTTP/1.0 и Cache-Control: max-age для HTTP/1.1). Директива access_log off отключает запись логов для статических файлов указанных типов, что снижает нагрузку на жесткий диск. (Внимание: перед ее использованием продумайте, точно ли в вашем случае это уместно с точки зрения безопасности.)

Сжатие GZIP


gzip on;


включение сжатия

gzip_types text/html text/plain text/css application/x-javascript text/javascript application/javascript image/svg+xml application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject application/xml+rss text/plain;


указываем типы файлов, для которых оно используется. Здесь перечислены типы для HTML, CSS, JavaScript, SVG и шрифтов TTF и OTF.

gzip_min_length 512;


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

gzip_vary on;


добавление заголовка Vary: Accept-Encoding, который указывает, что ответы сервера на запросы с поддержкой GZIP и без нее различаются. (Имеет смысл в тех случаях, когда есть клиенты с подключением через proxy, у которых не поддерживается GZIP-сжатие).

gzip_proxied any;


разрешает сжатие для запросов, сделанных через proxy

gzip_comp_level 6;


степень сжатия. Имеет смысл поэкспериментировать в диапазоне 6—8, чтобы найти оптимальное соотношение нагрузки на сеть и процессор.

Оптимизация SSL/TLS


ssl_session_tickets on;


использование SSL-тикетов для более быстрого возобновления SSL-сессии при повторном подключении того же клиента.

ssl_session_timeout 12h;


время, в течение которого можно возобновить SSL-сессию

ssl_session_cache  shared:SSL:10m;


кеш для хранения параметров сессий: shared — означает разделяемый между всеми рабочими процессами nginx, SSL — имя кеша, 10m — объем.

ssl_stapling on;


включает использование OSCP stapling, что позволяет ускорить установку SSL-сессии за счет того, что подтверждение, что сертификат не был отозван, отправляется сразу же, клиенту не нужно делать отдельный запрос.

ssl_stapling_verify on;


включает проверку корректности OSCP-ответа перед ее отправкой серверу.
Если ssl_stapling_verify включен, то необходимо также добавить директиву ssl_trusted_certificate путь_к_файлу_сертификата, в которой указать путь к корневому сертификату (он приходит при заказе сертификата вместе с основным файлом и обычно называется certificate_ca.crt).

Прочие настройки


proxy_buffers 32 64k;


если в логе ошибок часто встречается сообщение an upstream response is buffered to a temporary file, имеет смысл увеличить сначала размер буфера до значения, при котором в нем будет умещаться большинство HTML-страниц сайта полностью, либо увеличить количество буферов, если с сервером устанавливается много одновременных соединений.

open_file_cache max=2000 inactive=30s;


кеширование дескрипторов открытых файлов. Может дать небольшой прирост к производительности на выделенных серверах, где стоит небольшое количество сайтов за счет того, что исчезнет необходимость каждый раз открывать часто используемые файлы заново.

timer_resolution 200ms;


Уменьшает число системных вызовов gettimeofday(), делая их не чаще, чем раз в указанный промежуток времени. Это позволяет снизить нагрузку на процессор в обмен на снижение точности, с которой будет фиксироваться время событий в логах.

directio 4m;


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

Также есть еще ряд настроек, например, worker_processes, use, sendfile, tcp_nopush, tcp_nodelay, для которых в современных версиях nginx значения по умолчанию оптимальны для типичных сценариев использования Web-сервера. Менять их без необходимости и понимания того, что и зачем вы делаете, не имеет смысла.

2 комментария:

Нет
Гость
0

Мозила рекомендует отключать тикеты ссл-сессии

https://mozilla.github.io/server-side-tls/ssl-config-generator/

4X_Pro
0

На мой взгляд, это уместно только для тех случаев, когда безопасность предельно критична, типа сайтов банков или Госуслуг. А, скажем, для Интернет-магазина с посещаемостью в 100 человек или для личного блога скорость открытия сайта поважнее будет.

Написать комментарий


Задать вопрос