Для початку, обговоримо для чого це потрібно.
Раніше я не приділяв уваги цьому, але, закривши тікет про включення 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 для прекомпрессіі даних.