Nginx включаємо gzip-стиснення на льоту

Для початку, обговоримо для чого це потрібно.

Раніше я не приділяв уваги цьому, але, закривши тікет про включення gzip-стиснення на одному з поточних проектів, над якими я працюю, - задумався, а навіщо? Швидше за все, вам, як і мені, не шкода трафіку з вашого сервера, так і вже багато де є безлімітні високошвидкісні канали зв'язку. Однак, це не завжди так, і основна мета - не зменшити трафік з сервера (хоча це логічний наслідок), а зменшити трафік для клієнта. Зараз досить популярні мобільні пристрої, але, мобільний інтернет і раніше відстає від проводового як за швидкістю, так і за ціною (особливо в роумінгу). Тому, це, в першу чергу, турбота про користувачів.

Але треба сказати, що тут є і проблеми: деякі старі або інші особливо видатні браузери не підтримують gzip-стиснення. Але нам пощастило, ця проблема хвилює досить багатьох, тому для її вирішення особливо морочитися не доведеться.

Тут ми включаємо стиснення в контексті "http" (перший рядок), але можна робити і в інших контекстах: "server", "location", "if in location".

Тепер невеликі пояснення:

  • gzip on - включає підтримку gzip в цілому;
  • gzip_disable "msie6" - відключає стиснення для експлорера 5.5 і 6, тому що не підтримується;
  • gzip_buffers - встановлює розмір буферу, в якому зберігається стисла інформація;
  • gzip_complevel - рівень стиснення, 1 - мінімальне, 9 - максимальне;
  • gzip_proxied any - стискати дані відповідей для proxy-серверів;
  • gzip_types - MIME-types відповідей, які повинні бути стиснуті;
  • gzip_vary on - включає додавання в відповідь заголовка "Vary: Accept-Encoding", для IE 4-6 це призведе до некешірованію даних через бага.

Після редагування не забуваємо перезавантажити сервер. Наприклад, командою:
sudo service nginx restart

Цей спосіб включить стиснення даних "на льоту" - тобто під час формування відповіді, що має збільшити навантаження на CPU і використання пам'яті сервера, однак, знизити кількість трафіку. Якщо у вас багато статичних даних, які ви б не хотіли стискати на льоту, то можна використовувати модуль HttpGzipStaticModule для прекомпрессіі даних.

Схожі статті