включить сжатие gzip в nginx

Я пытаюсь включить сжатие gzip для компоненты мой сайт. У меня есть сервер ubuntu 11.04 и nginx 1.2.
в моей конфигурации nginx веб-сайта у меня есть это

gzip             on;
#gzip_min_length  1000;
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 application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
#it was gzip_buffers 16 8k; 
gzip_buffers 128 4k; #my pagesize is 4
gzip_disable "MSIE [1-6].(?!.*SV1)";

и YSlow и Google speed measures советуют мне использовать gzip для уменьшения передачи по сети. теперь, когда я пытаюсь curl -I my_js_file Я получил

curl -I http://www.albawaba.com/sites/default/files/js/js_367664096ca6baf65052749f685cac7b.js
HTTP/1.1 200 OK
Server: nginx/1.2.0
Date: Sun, 14 Apr 2013 13:15:43 GMT
Content-Type: application/x-javascript
Content-Length: 208463
Connection: keep-alive
Last-Modified: Sun, 14 Apr 2013 10:58:06 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
Pragma: public
Cache-Control: public
Accept-Ranges: bytes

любая идея, что я сделал неправильно или что я должен сделать, чтобы получить сжатый контент?

9 ответов


как писали другие, недостаточно включить сжатие gzip на вашем сервере - клиент также должен запросить его в своих запросах через Accept-Encoding: gzip заголовок (или его надмножество). Современные браузеры включают этот заголовок автоматически, но для curl вам нужно будет включить в свою команду одно из следующих действий:

  • -H "Accept-Encoding: gzip" : вы должны увидеть Content-Encoding: gzip заголовок в ответе (возможно, потребуется выводить заголовки с curl's -v флаг), а также некоторые, казалось бы, искаженный вывод для содержимого, фактического потока gzip.
  • --compressed : вы все равно должны увидеть Content-Encoding: gzip в заголовках ответов, но curl знает, чтобы распаковать содержимое перед его выводом.

Я не могу найти ничего явно неправильного в вашей конфигурации, обычно gzip на & gzip_types application / x-javascript было бы достаточно, чтобы вы пошли. Если все работает правильно, вы получите" Content-Encoding:gzip", возвращенный вам.

пожалуйста, имейте в виду: у меня гораздо больше согласованности с инструментами разработчика GOOGLE (curl просто не ведет себя так, как браузер).

в Chrome щелкните правой кнопкой мыши и перейдите в "проверить элемент", затем перейдите в "сеть" (затем перезагрузите если вам нужно), затем нажмите на ресурс и проверьте вкладку заголовка, вывод должен выглядеть так (Обратите внимание, что кодировка содержимого-gzip, yay):

Request URL:https://ssl.gstatic.com/gb/js/sem_a3becc1f55aef317b63a03a400446790.js
Request Method:GET
Status Code:200 OK (from cache)
Response Headersview source
age:199067
cache-control:public, max-age=691200
content-encoding:gzip
content-length:19132
content-type:text/javascript
date:Fri, 12 Apr 2013 06:32:58 GMT
expires:Sat, 20 Apr 2013 06:32:58 GMT
last-modified:Sat, 23 Mar 2013 01:48:21 GMT
server:sffe
status:200 OK
vary:Accept-Encoding
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block

в любом случае, если вы уверены, что ваш контент не получает gzipped, я обычно встаю и бегу довольно быстро со следующим:

## Compression
gzip              on;
gzip_buffers      16 8k;
gzip_comp_level   4;
gzip_http_version 1.0;
gzip_min_length   1280;
gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
gzip_vary         on;

вы можете попробовать это вместо кода и / или настроить значения по одному, чтобы помочь вам локализовать проблему.

Не забудьте перезагрузить или перезагрузить nginx после изменения конфигурации.

также может быть полезно проверить свои журналы и посмотреть, есть ли что-нибудь интересное, если вы все еще застряли.


Я только что изменил gzip_http_version 1.1; на gzip_http_version 1.0; и тогда это сработало


мне пришлось включить gzip в моем /etc/nginx/nginx.conf конфигурация:

gzip on;
gzip_disable "msie6";

gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

обратите внимание, что я должен был добавить application/javascript стандартный gzip_types конфигурации.


Я просто предполагаю здесь, но я думаю, что вам, возможно, придется увеличить размер буфера gzip.

вот файлы, которые браузер вытаскивает из домена. Номер справа-это размер загрузки файла.

Files served from domain

вы не можете быть в состоянии сказать из снимка экрана, но все текстовые файлы содержимого gzipped, за исключением файла js, который вы упоминаете в своем вопросе. На скриншоте файл js-это файл зеленого цвета, размером около 200K. Этот размер файла больше, чем вы указали для буферов gzip (128K).

на gzip module docs на самом деле не дают хорошего представления о том, для чего используются буферы gzip (используются ли буферы для несжатых или сжатых данных). Однако следующее сообщение, похоже, указывает, что размер буфера должен быть больше, чем размер несжатого файла:большие файлы с NGINX, GZip и SSL


вам нужно запустить:

curl -I --compressed my_js_file

чтобы заставить curl отправить заголовок Accept-Encoding для gzip-сервер будет сжимать контент только в том случае, если клиент отправляет заголовок, говорящий, что он его примет.

NB вы можете написать:

gzip_disable "msi6"

вместо того, чтобы использовать регулярное выражение для отключения в IE 5.5 и 6, и вам не нужно указывать text/html как тип, потому что он всегда сжимается, пока активирован gzip.


вот моя конфигурация nginx, и она работает.

gzip                on;
gzip_min_length     1000;
gzip_buffers        4 8k;
gzip_http_version   1.0;
gzip_disable        "msie6";
gzip_types          text/plain text/css application/json application/javascript application/x-javasc    ript text/xml application/xml application/xml+rss text/javascript;
gzip_vary           on;

Я думаю, что ключевые точки gzip_disable, gzip_disable и gzip_types.


Так же, как Alaa, я должен был добавить gzip_http_version 1.0; (ранее версия не была указана) для его работы (я попробовал Firefox 27.0.0).


Я испытал ту же проблему, что и Alaa, и проблема вызвана антивирусным программным обеспечением, которое в настоящее время установлено на моем компьютере.

прокси-серверы и антивирусное программное обеспечение могут отключить сжатие при загрузке файлов на клиентскую машину. Поэтому, если вы запускаете веб-сайт в браузере на клиентском компьютере, использующем такое антивирусное программное обеспечение, или который находится за промежуточным прокси-сервером (многие прокси прозрачны, и вы можете даже не знать о прокси промежуточные между клиентом и веб-сервером), они могут быть причиной этой проблемы.

Отключение антивируса решило мою проблему с браузерами, и вам даже не нужно устанавливать gzip_http_version в 1.0.

надеюсь, что это поможет вам.