Подтвердить что ты не робот

Включить сжатие 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 советуют мне использовать 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

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

4b9b3361

Ответ 1

Я просто изменил gzip_http_version 1.1; как gzip_http_version 1.0;, а затем он работал

Ответ 2

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

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

Ответ 3

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

ПОЖАЛУЙСТА, ХРАНИТЕ В РАЗНООБРАЗИИ: у меня гораздо больше согласованности с инструментами GOOGLE DEVELOPER TOOLS (завиток просто не ведет себя так, как это сделал бы браузер).

В 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 после изменения конфигурации.

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

Ответ 4

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

curl -I --compressed my_js_file

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

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

gzip_disable "msi6"

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

Ответ 5

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

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

Files served from domain

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

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

Ответ 6

Мне пришлось включить 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.

Ответ 7

Вот моя конфигурация 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.

Ответ 8

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