Налаштування 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 дуже просте і дає сайту безліч переваг. Відвідувачі та пошукові системи зможуть завантажувати сайт набагато швидше.