Настройка gzip на Nginx в CentOS 7
Centos | Комментировать запись
Скорость загрузки сайта зависит от размера всех файлов, которые должен загрузить браузер. Уменьшив размер файлов, вы сможете значительно ускорить загрузку страницы.
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
Создайте ещё несколько тестовых файлов: jpg, таблицу стилей css и JavaScript-файл js.
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 отключено. Если сжатие включено, сервер добавляет к предыдущим строкам заголовок:
Content-Encoding: gzip.
Итак, на данный момент сервер не сжимает никаких файлов. Чтобы убедиться в этом, запросите тестовый файл 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
Vary: 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
Теперь несжатым останется только test.jpg, файл изображения.
Заключение
Настройка сжатия gzip на Nginx очень проста и даёт сайту множество преимуществ. Посетители и поисковые системы смогут загружать сайт гораздо быстрее.
Tags: CentOS 7, Gzip, NGINX