Поиск по сайту:

Как сэкономить трафик с помощью nginxs HttpGzipModule на Debian Jessie


Это руководство существует для этих версий ОС

  • Debian 8 (Джесси)
  • Debian 6 (Squeeze)

На этой странице

  1. 1 Предварительное примечание
  2. 2 Настройка HttpGzipModule
  3. 3 Тестирование
  4. 4 ссылки

В этом руководстве я опишу, как настроить HttpGzipModule на веб-сервере nginx (в Debian Jessie). HttpGzipModule позволяет nginx сжимать файлы и доставлять их клиентам (например, браузерам), которые могут обрабатывать сжатый контент, что делают большинство современных браузеров. С помощью HttpGzipModule вы можете сжимать HTML, CSS, Javascript, текстовые или XML-файлы до прибл. 20 - 30% от их исходного размера, тем самым экономя трафик вашего сервера и делая пользователей вашего модема более счастливыми.

Сжатие файлов вызывает несколько большую нагрузку на сервер, но, по моему опыту, это компенсируется тем, что время подключения клиентов к вашему серверу значительно уменьшается. Например, пользователю модема, которому требовалось семь секунд для загрузки несжатого HTML-файла, теперь может потребоваться всего две секунды для того же, но сжатого файла.

Используя HttpGzipModule, вам не нужно бояться, что вы исключите пользователей со старыми браузерами, которые не могут обрабатывать сжатый контент. Браузер согласовывает с сервером перед передачей любого файла, и если браузер не может обрабатывать сжатый контент, сервер доставляет файлы в несжатом виде.

1 Предварительное примечание

Я предполагаю, что у вас есть рабочая установка nginx на вашем сервере Debian, например. как показано в этом руководстве: Установка Nginx с PHP (как PHP-FPM) и MariaDB (LEMP) в Debian 8

2 Настройка HttpGzipModule

Откройте файл /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Вы обнаружите, что сжатие gzip уже включено (в разделе http {}):

[...]
http {
[...]
##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

[...] } [...]

gzip включен; включает сжатие gzip.

gzip_disable \MSIE [1-6]\.(?!.*SV1)\; отключает сжатие gzip для браузеров, которые его не поддерживают (в данном случае MS Internet Explorer до версии 6 SV1).

Конечно, мы можем настроить эту конфигурацию (вы можете найти список возможных директив конфигурации на http://nginx.org/en/docs/http/ngx_http_gzip_module.html):

gzip_http_версия 1.1; - Это включает сжатие gzip для HTTP-запроса версии 1.1. Поскольку заголовок Content-Length не установлен, это сделает невозможной поддержку активности в версии 1.0.

gzip_vary включен; - Это устанавливает заголовок ответа Vary: Accept-Encoding. У некоторых прокси есть ошибка, заключающаяся в том, что они передают сжатый контент браузерам, которые его не поддерживают. Установив заголовок Vary: Accept-Encoding, вы указываете прокси хранить как сжатую, так и несжатую версию контента.

gzip_comp_level 6; - Это уровень сжатия (от 1 до 9), где 1 — наименьшее сжатие (самое быстрое), а 9 — максимальное (самое медленное).

gzip_proxy любой; - Это настраивает, как должны обрабатываться запросы, поступающие от прокси. любые средства включают сжатие для всех запросов.

gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; - Это сообщает nginx, какие типы файлов сжимать (текст/html всегда сжимается). Поскольку файлы Javascript могут иметь разные типы файлов на каждом сервере, я включил несколько возможных типов MIME Javascript (то же самое касается XML).

gzip_buffers 16 8k; - Это назначает количество и размер буферов сжатия. Значение по умолчанию — gzip_buffers 4 4k; или gzip_buffers 4 8k;, но я увеличил это значение, чтобы убедиться, что большие файлы Javascript или CSS также могут быть сжаты.

Итак, моя окончательная конфигурация выглядит следующим образом:

[...]
http {
    [...]
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    [...]
}
[...]

Перезагрузите nginx:

service nginx reload

3 Тестирование

Чтобы проверить, работает ли ваша конфигурация, вы можете использовать инструменты разработчика в Firefox или Google Chrome и получить доступ к текстовому файлу через Firefox (например, к статической HTML-странице). В выходных данных заголовков HTTP вы должны увидеть, что клиент (Firefox) отправил заголовок Accept-Encoding: gzip,deflate, чтобы сообщить серверу, что он принимает сжатое содержимое в форматах gzip и deflate; сервер должен сжать файл и отправить его с заголовком Content-Encoding: gzip (как вы видите в этом примере, nginx также устанавливает заголовок Vary: Accept-Encoding):

4 ссылки

  • nginx HttpGzipModule: http://nginx.org/en/docs/http/ngx_http_gzip_module.html
  • Debian: http://www.debian.org/