Налаштування gzip на Nginx у CentOS 7
Пропозиція від 8host.com

Швидкість завантаження сайту залежить від розміру всіх файлів, які потрібно завантажити браузер. Зменшивши розмір файлів, можна значно прискорити завантаження сторінки.
gzip – це найпопулярніша програма стиснення даних. Веб-сервер Nginx можна настроїти для підтримки gzip. Стислі файли будуть надалі розпаковані браузером. Таким чином можна скоротити кількість даних, що передаються між веб-сервером та браузером.
Деякі файли стискаються краще за інші. Наприклад, стиснути текстові файли дуже просто: в результаті їх можна зменшити вдвічі. А зображення (файли jpeg або png) спочатку стиснуті, тому додатковий стиск gzip майже не дає результатів. Майте на увазі: стислі файли використовують ресурси сервера, тому рекомендується стискати тільки ті файли, на розмір яких програма gzip може значно вплинути.
Цей посібник допоможе настроїти Nginx для використання gzip.
Вимоги
- Сервер CentOS 7
- Користувач із правами sudo.
- Попередньо встановлений веб-сервер Nginx (покроковий посібник із встановлення – тут).
1: Створіть тестові файли
Для початку потрібно створити в стандартному каталозі Nginx кілька файлів, щоб потренуватися на них.
Щоб визначити, який тип файлу передається по мережі, Nginx не аналізує вміст файлу – ця операція зайняла б надто багато часу. Натомість Nginx просто читає розширення файлу, щоб визначити його MIME-тип.
Тому неважливо, що міститимуть тестові файли. Досить просто правильно встановити ім'я файлу, щоб Nginx сприймав порожній файл як зображення, таблицю стилів і т.п.
У цьому прикладі налаштування Nginx нестискатиме надто маленькі файли. Створіть тестовий файл на ім'я test.html розміром 1 кілобайт.
sudo truncate -s 1k /usr/share/nginx/html/test.html
sudo truncate -s 1k /usr/share/nginx/html/test.jpg sudo truncate -s 1k /usr/share/nginx/html/test.css sudo truncate -s 1k /usr/share/ nginx/html/test.js
2: Перевірте стандартну поведінку сервера
Тепер потрібно перевірити, як Nginx стискає файли.
Спробуйте стиснути тестовий HTML-файл test.html.
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
Примітка : HTTP-заголовок Accept-Encoding: gzip вказує на те, що веб-сервер може обслуговувати стислий за допомогою gzip контент.
У відповідь сервер поверне кілька заголовків HTTP.
HTTP/1.1 200 OK Server: nginx/1.6.3 Date: Fri, 11 Mar 2016 12:53:06 GMT Content-Type: text/html Content-Length: 1024 Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT Connection: keep-alive ETag: "56e2be82-400" Accept-Ranges: bytes
Як бачите, у висновку немає жодних згадок про gzip; отже, сервер не підтримує стиснення gzip. За промовчанням у системі CentOS 7 стиснення gzip на сервері Nginx вимкнено. Якщо стиснення увімкнено, сервер додає до попередніх рядків заголовок:
Отже, на даний момент сервер не стискає жодних файлів. Щоб переконатися в цьому, зверніться до тестового файлу test.jpg:
curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
Сервер поверне приблизно такий результат:
HTTP/1.1 200 OK Server: nginx/1.6.3 Date: Fri, 11 Mar 2016 12:58:03 GMT Content-Type: image/jpeg Content-Length: 1024 Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT Connection: keep-alive ETag: "56e2be85-400" Accept-Ranges: bytes
Заголовок Content-Encoding: gzip у виводі відсутній; отже, файл був стиснутий.
Повторіть тест із файлом CSS:
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
Як бачите, цей файл також не стискається:
HTTP/1.1 200 OK Server: nginx/1.6.3 Date: Fri, 11 Mar 2016 12:59:04 GMT Content-Type: text/css Content-Length: 1024 Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT Connection: keep-alive ETag: "56e2be85-400" Accept-Ranges: bytes
3: Увімкнення та налаштування gzip у Nginx
Тепер потрібно увімкнути gzip і налаштувати стиснення файлів.
Модуль gzip є одним з основних модулів Nginx, тобто він вже встановлений, але потребує налаштування.
Як правило, на новій установці Nginx в CentOS 7 всі файли каталогу /etc/nginx/conf.d з розширенням .conf завантажуються автоматично. Це дозволяє швидко настроїти додаткові модулі.
Щоб увімкнути gzip, створіть конфігураційний файл gzip.conf:
sudo nano /etc/nginx/conf.d/gzip.conf
Вставте в нього наступний код:
## # `gzip` Settings # # gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font /opentype image/svg+xml image/x-icon;
Збережіть та закрийте файл.
Щойно доданий код складається з наступних директив:
- gzip on включає стиснення файлів.
- gzip_disable "msie6" виключає
- Internet Explorer 6 зі списку браузерів, які отримуватимуть стисліфайли (в IE6 повністю відсутня підтримка gzip)
- gzip_vary та gzip_proxied забезпечує правильну роботу проксі-серверів.
- gzip_comp_level 6 задає кількість файлів, що стискаються. Чим більше файлів потрібно стиснути, тим більше ресурсів витрачається.
- gzip_http_version 1.1 обмежує стиснення браузерами, що підтримують протокол HTTP/1.1 (браузери, які не підтримують цей протокол, швидше за все, не підтримують стиснення gzip).
- gzip_min_length 256 встановлює мінімальний обсяг файлу, що стискається. Тепер сервер не стискатиме файли менше 256 байт.
- gzip_types перераховує MIME-типи файлів, які потрібно стиснути; в даному випадку до списку включені файли HTML, XML, Javascript та JSON, таблиці стилів CSS, зображення SVG, іконки та веб-шрифти.
Щоб оновити установки, перезапустіть Nginx.
sudo systemctl restart nginx
4: Перевірте налаштування
Після налаштування Nginx потрібно переконатися, що сервер працює належним чином.
Для цього запитайте тестові файли (як у розділі 2). Висновок повинен містити назву Content-Encoding: gzip.
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
Тепер у висновку з'явиться заголовок, якого не було раніше:
HTTP/1.1 200 OK Server: nginx/1.6.3 Date: Fri, 11 Mar 2016 13:19:16 GMT Content-Type: text/html Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT Connection: keep-alive Значальні: Accept-Encoding Content-Encoding: gzip
Перевірте інші тестові файли:
curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg curl -H "Accept-Encoding: gzip" -I http://localhost/test.css curl - H "Accept-Encoding: gzip" -I http://localhost/test.js
Тепер несжатым залишиться лише файл.зображення.
Висновок
Налаштування стиснення gzip на Nginx дуже просте і дає сайту безліч переваг. Відвідувачі та пошукові системи зможуть завантажувати сайт набагато швидше.