включить сжатие 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 в моем /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.
вот файлы, которые браузер вытаскивает из домена. Номер справа-это размер загрузки файла.
вы не можете быть в состоянии сказать из снимка экрана, но все текстовые файлы содержимого 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.
надеюсь, что это поможет вам.