Настройка Gzip в Nginx
Модуль ngx_http_gzip_module - это фильтр, сжимающий ответ методом gzip, что позволяет уменьшить размер передаваемых данных в 2 и более раз.
Включаем GZip в Nginx, в файле /usr/local/etc/nginx/nginx.conf
http { ... # Включение модуля gzip on; # Минимальная длина ответа, при которой модуль будет жать, в байтах gzip_min_length 1000; # Разрешить сжатие для всех проксированных запросов gzip_proxied any; # MIME-типы которые необходимо жать #gzip_types text/plain text/html text/xml application/xml application/x-javascript text/javascript text/css text/json; # Если у вас появляются варнинги, типа "duplicate MIME type text/html", то вам стоит исключить text/html #gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json; # Запрещает сжатие ответа методом gzip для IE6 gzip_disable "msie6"; # Уровень gzip-компрессии gzip_comp_level 8; ... }
Полное описание всех директив модуля
Не забудьте перезапустить Nginx!
Комментарии
Не думаю, что установка gzip_comp_level 8; разумная, лучше 6, а если процессор не шустрый, то еще чуть меньше. Там разница в процентах, но время генерации намного выше. А так, спасибо.
P.S. Ну и gzip_min_length 1000; можно поиграться, на малых файлах отдача не заметна. Нужно смотреть какие файлы преобладают среди маленьких и как сжимаются. но меньше явно делать не стоит, если процессор слабый, то можно увеличить, я думаю
В http://adw0rd.ru/2008/mod_deflate/ я рассказывал про инструмент для расчета степени gzip-сжатия, я им пользуюсь, однако надо всегда опираться на конкретный случай :)
Из MIME-типов, которые необходимо жать, надо удалить text/html - nginx в последних версиях делает это по дефолту.
Было бы интересно ещё почитать про всякие фичи энжайныкса типа реакции на повышенный LA или на всякие другие интересные события.
а это при ребуте нджинкса
(ругается на gzip_types)
в порядке вещей?
Выполните
и думаю все станет понятно
ну так у вас тоже так?)
Нет, у меня не так,
но я знаю хост у которого так и там админам пофиг :)
У меня та же байда появилась с warning после включения gzip. Как убрать?
Уберите объявление text/html и все
Спасибо, я уже разобрался, в последних версиях nginx text/html сжимается автоматом, так что сделал так:
Только почему вы в статье оставили? Может сделать пометку?
Сжатие js и css я убрал, вместо него сжимаю скрипты вручную и использую gzip_static on;, если в папке есть .css.gz или .js.gz, то nginx отдает их за место оригинальных причем сверяется дата и если оригинальный новее, то отдается он, а не архивная версия. Таким образом снизил нагрузку на сервер:)
Оставил так как вроде должно быть понятно где ошибка и так, по крайней мере мне сразу стало ясно.
Но судя по камментам надо добавить пометку :)
Здравствуйте. Помогите пожалуйста включить сжатие на связке nginx+apache. Вот что мне ответили в поддержке: На наших серверах работает связка nginx+apache. Через nginx отдаются статические файлы с расширениями: jpg,jpeg,gif,png,css,zip,tgz,gz,rar,bz2,doc,xls,exe,pdf,ppt,txt,tar,mid,midi,wav,bmp,rtf,js,swf,f4v,flv,avi,wmv,mp3,mp4
Это значит файлы не обрабатываются через apache и если есть какие-то директивы в файле .htaccess, то они тоже не подействуют, чтобы apache мог обработать данные файлы нужно давать ссылки на несуществующие файлы, в этом случае, запрос будет передаваться web серверу apache, соответсвенно можно будет использовать директивы .htaccess для обработки этих запросов.
Более понятного ответа я не добился. На сервере лежат сжатые css и js файлы, но они не загружаются. Подскажите что прописать в .htaccess&
Думаю имелось в виду нечто такое:
/static/css/screen.css -> отдается самим nginx
/some/path/getcss.php?file=screen.css -> nginx не станет обрабатывать, так как у файла нет расширения css, поэтому уйдет управление на apache
далее, вам надо либо написать правило с регуляркой для apache, либо создать файл /some/path/getcss.php с содержимым:
ps. Написать правило в .htaccess более правильное решение с первого взгляда. Как именно его написать я уже не впомню, так как не пользуюсь уже давно apache вообще, можете спросить как это вам сделать на форуме http://pyha.ru/forum/
Сории за некропостинг
Вообще-то выход есть
То есть если у вас есть статика то отдает nginx, а если её нет (404 ошибка) то переправляем запрос на apache ;)
Оставьте свой комментарий