Menu

nginx HttpGzipModule на Debian Jessie

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

 

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

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

 

 

1 Настройка HttpGzipModule

Открыть /etc/nginx/nginx.conf :

nano /etc/nginx/nginx.conf

Видно, что сжатие GZIP уже включено (в HTTP {} секции):

[...]

HTTP {
[...]

 ##
# GZIP Settings
##

 
GZIP on;
 
gzip_disable "msie6";

[...]

}

[...]

GZIP on; позволяет 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_version 1.1; - Это позволяет GZIP сжатие для запроса HTTP версии 1.1. Поскольку заголовок Content-Length не установлен, то это сделает сообщения Keepalive невозможными с версией 1.0.

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

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

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

gzip_types text / plain text / html text / css application / json application / х-Javascript text / xml application / xml application / xml+rss text /javascript application / javaScript text / х-js- Это говорит Nginx , какие типы файлов для сжатия ( text / 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 / х-Javascript text / xml application / xml application / xml+rss text /javascript application / javaScript text / х-JS;

    gzip_buffers 16 8k;

    gzip_disable "MSIE [1-6] \. (* SV1?!.)";

    [...]

}

[...]

Перезагрузка Nginx:

service nginx reload

 

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

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

 

 

 

1 Комментарий

Авторизуйтесь, чтобы получить возможность оставлять комментарии

Другие материалы в этой категории:

Go to top