Ответ 1
Я просто изменил gzip_http_version 1.1; как gzip_http_version 1.0;, а затем он работал
Я пытаюсь включить сжатие 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
любое представление о том, что я сделал неправильно или что мне делать, чтобы получить сжатый контент?
Я просто изменил gzip_http_version 1.1; как gzip_http_version 1.0;, а затем он работал
Как писали другие, этого недостаточно для включения сжатия gzip на вашем сервере - клиент также должен запросить его в своих запросах через заголовок Accept-Encoding: gzip
(или его надмножество). Современные браузеры автоматически включают этот заголовок, но для завивки вам нужно включить в команду одну из следующих команд:
-H "Accept-Encoding: gzip"
: вы должны увидеть заголовок Content-Encoding: gzip
в ответе (возможно, нужно выводить заголовки с флагом curl -v
), а также некоторый, казалось бы, искаженный вывод для содержимого, фактический поток gzip.--compressed
: вы должны видеть Content-Encoding: gzip
в заголовках ответов, но завиток знает, как распаковать содержимое перед его выходом.Я не могу найти что-то явно неправильное с вашей конфигурацией, обычно 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 после изменения конфигурации.
Также может быть полезно проверить ваши журналы и посмотреть, есть ли что-нибудь интересное, если вы все еще застряли.
Вам нужно запустить:
curl -I --compressed my_js_file
чтобы заставить curl отправить заголовок Accept-Encoding для gzip - сервер будет только сжимать содержимое, если клиент отправит заголовок, в котором он примет его.
NB вы можете написать:
gzip_disable "msi6"
вместо использования регулярного выражения для отключения в IE 5.5 и 6, и вам не нужно указывать text/html как тип, потому что он всегда сжимается до тех пор, пока активирован gzip.
Я просто предполагаю здесь, но думаю, вам, возможно, придется увеличить размер буфера gzip.
Вот файлы, которые браузер удаляет из домена. Номер справа - это размер загрузки файла.
Возможно, вы не сможете сказать с экрана, но все файлы текстового контента AG gzipped, за исключением js файла, который вы упомянули в своем вопросе. На скриншоте файл js - это файл зеленого цвета размером около 200K. Этот размер файла больше, чем вы указали для своих буферов gzip (128K).
Документы Gzip-модуля не дают хорошего представления о том, для чего используются буферы gzip (используются ли буферы для несжатые или сжатые данные). Однако следующая публикация указывает, что размер буфера должен быть больше, чем размер несжатого файла: Большие файлы с NGINX, GZip и SSL
Мне пришлось включить 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
.
Вот моя конфигурация 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).