VPSVDS.ruСтатьиНастройка хостингов → Включение сжатия и кэширования на хостинге Ru-Center

Включение сжатия и кэширования на хостинге Ru-Center

2 февраля 2016 года

На форуме Ru-Center, часто всплывает тема оптимизации сайтов на хостинге. На самом деле все не очень тривиально, из-за нюансов организации хостинга. Решил сделать инструкцию, как это сделано у меня.

Что мы хотим получить в итоге:

  • Увеличиваем скорость работы сайта;
  • Уменьшаем нагрузку на хостинг;
  • Повышаем оценку в сервисе google pagespeed.

Так как на хостинге РуЦентра веб-сервер apache (back-end) работает совместно с nginx (front-end), включать кэширование и  сжатие будем для nginx.

В панели управления хостингом для сайтов можно выбрать несколько режимов работы:

  1. Автоматический;
  2. Ручной;
  3. Перенаправление.

Панель управления хостингом

 Что означают эти режимы?

  1. Автоматический режим — все настройки делаются из панели управления хостингом. Из панели мы можем: настроить SSL шифрование, настроить кодировку сайта, запаролить директории сервера, включить модули apache и php и многое другое. Многим этого хватает и этот режим включен по умолчанию, но если мы хотим потюнинговать веб-сервер смотрим дальше.
  2. Ручной режим — настройки производятся в конфигурационных файлах. При переводе сайта в ручной режим, на основе текущих настроек, создаются конфигурационные файлы для серверов apache и nginx. Файлы можно найти в папке /home/идентификатор_хостинга/etc/apache_1.3 и /home/идентификатор_хостинга/etc/nginx .
  3. Перенаправление — просто редирект куда-нибудь и как-нибудь, что в настройках укажете. Нас этот пункт не особо интересует.

Теперь переводим сайт в ручной и отправляемся в папку с настройками nginx, для этого можно использовать хоть доступ по FTP, SSH или файловый менеджер из панели управления хостингом. Находим конфиг, для вашего сайта, вида example.com.site.conf и открываем его. Мы видим базовый конфиг, созданный на основе текущих настроек, его нам надо немного подправить.

Находим в файле текст:

# Static files location
location ~* ^.+\.(jpg|jpeg|gif|swf|png|ico|mp3|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|dat|avi|ppt|txt|tar|mid|midi|wav|bmp|rtf|wmv|mpeg|mpg|mp4|m4a|spx|ogx|ogv|oga|webm|weba|ogg|tbz|js)$ {
root /home/example/example.com/docs;
access_log /var/log/example.com.access_log combined;
error_page 404 = @fallback;
log_not_found off;
# on
accel_htaccess_switch on;
}

Этот код отвечает за отдачу статического контента nginx, чтобы не напрягать зря Апач. Что означает этот код?

location ~* ^.+\.(jpg|jpeg|gif|swf|png|ico|mp3|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|dat|avi|ppt|txt|tar|mid|midi|wav|bmp|rtf|wmv|mpeg|mpg|mp4|m4a|spx|ogx|ogv|oga|webm|weba|ogg|tbz|js)$

Здесь указаны расширения файлов, которые будут считаться статическим контентом.

root /home/example/example.com/docs;

Это путь, где эти файлы хранятся.

В эту секцию мы добавим настройки кэширования, т.е. nginx будет сообщать браузеру посетителя, что эти файлы можно хранить локально в кэше и не скачивать каждый раз заново. Нам надо добавить директиву expires 30d; , которая указывает срок действия кэша, в данном случае 30 дней.

# Static files location
location ~* ^.+\.(jpg|jpeg|gif|swf|png|ico|mp3|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|dat|avi|ppt|txt|tar|mid|midi|wav|bmp|rtf|wmv|mpeg|mpg|mp4|m4a|spx|ogx|ogv|oga|webm|weba|ogg|tbz|js)$ {
expires 30d;
root /home/example/example.com/docs;
access_log /var/log/example.com.access_log combined;
error_page 404 = @fallback;
log_not_found off;
# on
accel_htaccess_switch on;
}

 Теперь пришла пора включить сжатие. Директивы я добавляю в секцию server, ищем такой код:

server {
listen ip_address:80;
server_name example.com www.example.com;
location / {

И приводим его к такому виду:

server {
listen ip_address:80;
server_name example.com www.example.com;
gzip_static on;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 2;
gzip_min_length 1024;
gzip_types text/css text/plain text/json text/x-js text/javascript text/xml application/json application/x-javascript application/xml application/xml+rss application/javascript;
gzip_disable "msie6";
gzip_vary on;
gzip_http_version 1.0;
location / {

Что мы сделали?

gzip_static on;

Включаем опцию gzip_static. Теперь, если на сервере рядом с сжимаемым файлом лежит уже готовый архив с таким же именем и расширением .gz, то этот архив и будет отдан клиенту. Как это использовать? Когда сайт готов, мы вручную сжимаем gzip нужные файлы (скрипты, таблицы стилей, xml файлы и т.д.), кладем их на сервер рядом с оригиналами. Важный нюанс: дата создания и изменения у оригинала и архива должны совпадать. Теперь, когда веб-клиент запрашивает нужный ему файл, nginx отдает готовый архив и все довольны, если архива нет, то файл сжимается согласно следующим директивам:

gzip on;

Включение сжатия

gzip_comp_level 2;

Уровень сжатия

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

Типы файлов, которые надо сжимать.

Подробности можно почитать на сайте nginx

 

После сохранения конфигурационного файла не забываем перезапустить веб-сервер из панели управления:

Панель управления веб-сервером

 

Результат работы можно проверить с помощью сервиса от google

Вот такими несложными манипуляциями, мы снижаем нагрузку на наш сайт и помогаем нашим посетителям, особенно мобильным клиентам.

 

Айхор Хостинг

Комментарии

#1. 29 октября 2015 года, 16:58. Алексей пишет:
Спасибо! На сайте ру-центра инструкций не найти, а по вашей все получилось. И разница сразу заметна.
#2. 14 ноября 2015 года, 01:13. Максим пишет:
Спасибо большое.

Скорость открытия сайта по счетчику гугла увеличилась с 46 до 92.
#3. 25 ноября 2015 года, 18:13. Благодарность пишет:
Огромное спасибо! Очень выручил!
#4. 26 ноября 2015 года, 15:45. Pashij пишет:
Огромное спасибо за статью! А то мучился пол-дня, чтоб включить всё это через htaccess, но ни к чему не пришел. Сделал то, что написано у Вас и реально разница с 53 до 89. Спасибо! Мегареспект! :-)
#5. 11 декабря 2015 года, 14:22. Жека пишет:
Все получилось, спасибо за подробный мануал!
#6. 11 декабря 2015 года, 22:26. Макс пишет:
Целый день воевал с gzip, а тут за 10 минут решил вопрос! Спасибо!!!
#7. 21 декабря 2015 года, 13:51. пишет:
Добрый день.
Прошу помочь разобраться с какталогами. У меня на хостинге Ru-Center нет файла example.com.site.conf в каталоге Веб-сервер/Файловый менеджер/home/идентификатор_хостинга/etc/nginx/
Я нашел этот файл ближе к корню- Веб-сервер/Файловый менеджер/etc/nginx/ Но он только для чтения. Я скопировал example.com.site.conf в Веб-сервер/Файловый менеджер/home/идентификатор_хостинга/etc/nginx/, доработал, как вы сказали, но сервис от google по прежнему требует сжатия. По видимому система использует не модифицированный файл.
Что делать? Разбираться с правами и править? И еще вопросы. После модификации и перезапуска сервера режим выставлять Ручной или Автоматический? У вас на картинке — автоматический. Будет ли отрабатывать файл конфигурации? Из описания понял, что система сама, если не найдет будет делать сжатие файлов. Так ли это?
#8. 21 декабря 2015 года, 23:39. Admin пишет:
Для Алексей #7
Вы, наверное, сайт в ручной режим не перевели. В панели управления внимательно посмотрите, там можно перевести в ручной режим сервер, и каждый сайт по отдельности. Это разные вещи! Сервер можно оставить в автоматическом режиме, а нужный сайт перевести в ручной. Тогда у Вас появятся файлы конфигурации Апача и ЭнЖингса, доступные для редактирования.
#9. 15 февраля 2016 года, 01:33. Гарик пишет:
Благодарствую, всё получилось! На их форуме какашка какая-то, а у вас всё понятно!
#10. 22 февраля 2016 года, 15:57. Вася пишет:
нет такого файла на хостинге, инструкция не работает.
#11. 22 февраля 2016 года, 16:10. Admin пишет:
Если файла нет, значит не перевели сайт в ручной режим. При переводе сайта в ручной режим, на основе текущих настроек, в папке /home/идентификатор_хостинга/etc/nginx создается автоматически файл example.com.site.conf
#12. 22 февраля 2016 года, 19:20. пишет:
в том то и дело что перевёл, озадачил техподдержку.
у вас инструкция для какого тарифного плана расписана?
#13. 22 февраля 2016 года, 19:23. пишет:
так кажется есть догадки. Файл в etc создаётся один для всех доменов на данном вебсервере? Как запустить nginx? В процессах его нет
#14. 22 февраля 2016 года, 23:41. пишет:
Один файл для всех создается, если перевести не сайт, а сервер в ручной режим. Актуально 100% на 302-тарифе и битриксе, на других не проверял. Процессы как смотрите? Nginx точно есть на всех тарифах. Сейчас в панели управления сайтами появились пункты «Сжатие данных» и «Кэширование данных». Со слов тех поддержки, это те же самые настройки, только гибкости меньше, чем через конфиги. Вы точно сайт перевели в ручной режим (Веб сервер>>Сайты)
#15. 2 марта 2016 года, 20:52. пишет:
Здравствуйте. Этот у меня не работает при ssl соединении. Подскажите пожалуйста, как модифицировать конфиг, чтобы сжатие и кэширование работали по https?
#16. 3 марта 2016 года, 12:54. Admin пишет:
@Сергей
Да, Вы правы, при использовании ssl инструкция не подходит. Дело, тут, вот в чем: у хостинга Ru-center сделано так,что при подключении ssl, nginx (а в инструкции настраивается он) выпадает из работы, запросы https (443 порт) принимает Apache, со всеми вытекающими последствиями. Сделано так, я полагаю, для упрощения.
При стандартной конфигурации, используется правильная схема: nginx (frontend) принимает запросы на стандартном 80 порту (http) и, в зависимости от правил, обрабатывает их (статику отдает, сжимает и т.д., и делает это быстрее и экономичнее, чем Апач) или перенаправляет на Apache (backend) висящий на 8080 порту, а результат отдает клиенту.
При включении ssl подключения идут по https на 443 порт, который слушает Apache и обрабатывает их. Nginx здесь не участвует, и все настройки ssl делаются только для Апача. Соответственно тут и тормоза и повышенные расходы ресурсов. Чтобы ситуацию изменить, парой строк в конфигах не обойтись.
Что можно сделать:
— Настроить сжатие и кэширование на Apache, забить на преимущества Nginx как фронтенда;
— Убрать настройки ssl из конфигов Апача, настроить ssl на Nginx, заставить его слушать 443 порт и заворачивать все на https, настроить проксирование запросов на Apache, настраивать сжатие и кэширование по инструкции. Довольно геморно, если опыта не хватает, есть нюансы с разными сертификатами, но более эффективно и правильно.
#17. 3 марта 2016 года, 23:14. Максим пишет:
Добрый вечер! Проделал все вышеперечисленные манипуляции.
Итог: http://www.gidnetwork.com/ — показывает, что сжатие включено
pagespeed — просит включить сжатие, причем, что до манипуляций, что и после показатель pagespeed не изменился.
Подскажите, что не так?
#18. 3 марта 2016 года, 23:28. Максим пишет:
Также добавлю, что https://developers.google.com/speed/pagespeed/insights/
показатели скорости 70/100, и помимо общих рекомендаций, предлагается рекомендация по сжатию всего одной страницы!
а показатель pagespeed (расширение chrome) 45/100
и расширение предлагает сжать 15 страниц!

Посоветуйте, кому верить?
#19. 7 марта 2016 года, 18:37. Сергей пишет:
Admin, спасибо за развёрнутый ответ по ssl. Вы очень помогли.
#20. 23 марта 2016 года, 11:11. Павел пишет:
А что делать, если папка nginx и там нет конфиг файла?
#21. 23 марта 2016 года, 14:13. Admin пишет:
Если в папке etc/nginx нет конфигурационного файла для сайта, то, скорее всего, Вы не перевели сайт в ручной режим (не сервер!). При переводе сайта в ручной режим, на основании настроек из панели, создаются конфиги для апача и энжингса.
#22. 24 марта 2016 года, 12:08. пишет:
Я перевожу сайт в ручной режим, но в папке nginx пусто, в папке apache_1.3 файлы есть.
#23. 24 марта 2016 года, 13:16. Admin пишет:
Странно очень. Проверил только что: создал новый сайт, перевел в ручной режим, добавились конфиги для апача и энжинкса. Попробуйте в поддержку обратиться. Тариф, кстати, какой?
#24. 24 марта 2016 года, 13:30. пишет:
Тариф 301))
#25. 24 марта 2016 года, 15:32. пишет:
Вообщем, написал в техподдержку. Провели они какие-то манипуляции, файл появился. Теперь другая проблема)) Перевожу сайт в ручной режим, у меня спрашивает «Переписать существующий файл конфигурации файлом, сгенерированным по актуальным значениям параметров, установленных в автоматическом режиме настройки» или
«Использовать для настройки сайта найденый файл конфигурации». Выбираю, чтобы перзаписал и делаю правки как написано выше, пытаюсь перезапустить сервер, а он не перезапускается. Сайт полностью ложиться)
#26. 25 марта 2016 года, 09:48. Admin пишет:
Лучше опять в ТП обращаться, видимо, что-то у них там хитрое сделано, и скорее всего, из-за тарифа. 301 тариф, насколько я знаю, уже архивный. Сервер из панели может не перезапускаться, если в конфигурационном файле ошибка есть (например скобка в секции не закрыта, или скрипт панели, который генерирует окончательный конфиг и перезапускает демонов, косячит. У меня было такое, когда в конфиге Nginx были дерективы по блокировке ботов и ограничению количества запросов, скрипт панели управления падал и не мог запустить сервер. Я решал это с помощью SSH консоли:
nginx -s reload
В ручную заставлял энжингс перезагрузить конфигурационный файл, и все работало. Если в конфиге ошибка есть, то можно делать так:
nginx -t
протестировать конфигурационный файл и проверить его расположение.
#27. 25 марта 2016 года, 10:12. пишет:
Добил я всё-таки ТП. Теперь сервер перезапускается, gzip работает, директиву в файле конфигурации прописал. Но, гад этот — пейджспид, говорит, что у меня сжатие идёт, но кеш браузера не используется для яндекс метрики и гугл аналитики. В любом случае спасибо за эту статью. Рад буду и вам помочь когда-нибудь)
#28. 25 марта 2016 года, 10:31. Admin пишет:
Сторонние скрипты в любом случае не закэшировать. Только если к себе перенести.
#29. 16 апреля 2016 года, 00:02. Олег пишет:
А не подскажите, в панели управления хостингом есть пункты включения сжатия и кеширования, это тоже самое что и через конфиги делать или разница есть?
#30. 26 апреля 2016 года, 12:25. александр пишет:
Добрый день!
Делаю все, как Вы сказали, но при попытке загрузки блога выдает:
Похоже, в вашей конфигурации PHP отсутствует расширение MySQL, необходимое для работы WordPress
#31. 26 апреля 2016 года, 14:05. Admin пишет:
А до изменения настроек все работало? В статье я настройки php не трогаю. Проверьте в панели, в разделе модули, какая версия php включена. Если php 7, то в ней нет mysql, есть pdo_mysql и mysqli. В настройках php есть пункт модули, проверьте что у Вас там подключено и какой драйвер BD используется в вашем WP. Я, если честно, с хостинга ру-центра съехал. Перебрался на http://vpsvds.ru/goto/ihor.php за 100 руб. в месяц (по акции за 75 руб. в месяц) и что-то мои сайты чувствуют там себя получше чем в nic.ru. Акция, кстати, до конца апреля месяца будет идти, подробности здесь есть http://vk.com/pages?oid=-120101304&p=% … 1%82%D0%B8
#32. 27 апреля 2016 года, 19:16. СК пишет:
Сначала сделать вышеперечисленное, но дочитав до момента
Сейчас в панели управления сайтами появились пункты «Сжатие данных» и «Кэширование данных». Со слов тех поддержки, это те же самые настройки, только гибкости меньше, чем через конфиги.
решил попробовать так. Результат есть, кто не хочет углублятся — пробуйте, включайте:

Веб сервер > Сайты > вашсайт.ру
Сжатие данных — включить.
Кэширование данных — ввести столько часов сколько нужно (в моем случае при установке 168 часов на PageSpeed Insights остаются только рекомендации по внешним скриптам Метрика, Карты, и т.д. на которые мы повлиять не можем).

Хостинг RuCenter, тариф «Битрикс», CMS WordPress, PHP 7.
#33. 29 апреля 2016 года, 15:21. alltopweb пишет:
Спасибо за дельный совет.
Через ручные настройки gzip буквально за 10 минут удалось включить!
#34. 9 июня 2016 года, 03:46. Андрей пишет:
Огромное спасибо за статью — самая подробная и хорошо описанная из всех тех которые я прочёл по теме сжатия и кеширования.
#35. 11 июля 2016 года, 00:41. Павел пишет:
Уважаемы автор! Что значит «дата создания и изменения у оригинала и архива должны совпадать»?
И главное — как этого добиться? То есть у меня есть css файл, пережимаю его в архив gzip …а дальше что? Как выставить дату создания и изменения одну? Перезаписать css? Чёт не догоняю
#36. 11 июля 2016 года, 01:05. пишет:
Уважаемый автор, дополните статью пожалуйста дополнительной информацией, например, какие значения могут быть вместо expires 30d? А именно, что можно прописать вместо d (дней). Могу ли я указать 1h (1 час)?
А также почему указывается уровень сжатия gzip_comp_level 2, а не gzip_comp_level 6? Я вот сейчас корректирую конфиг файл, а у меня тут именно 6 левел стоит? Ну то есть если есть разница в уровнях, то стоит хотя бы кратко описать для понимания. Спасибо
#37. 11 июля 2016 года, 01:30. пишет:
В общем, тариф 1С-Битрикс, всё сделал по инструкции, то есть добавил в нужные места две строчки:
gzip_static on; — и после, ниже
expires 1h;

Первый раз делал через Note++, второй раз через файловый менеджер админ панели. В конечном итоге сервак не перезапускается. Подсовываю оригинальный конфиг- перезапускается. То есть добавленые строчки NGNIX обрабатывать не хочет
#38. 11 июля 2016 года, 02:52. пишет:
@Павел
По поводу указания времени:
Интервалы времени можно задавать в миллисекундах, секундах, минутах, часах, днях и т.д., используя следующие суффиксы:

s секунды
m минуты
h часы
d дни
w недели
M месяцы, 30 дней
y годы, 365 дней
В одном значении можно комбинировать различные единицы, указывая их в порядке от более к менее значащим, и по желанию отделяя их пробелами. Например, “1h 30m” задаёт то же время, что и “90m” или “5400s”. Значение без суффикса задаёт секунды. Рекомендуется всегда указывать суффикс.
По поводу даты создания/изменения файла архива и исходных файлов:
Можно попробовать с датами и не «шаманить», а посмотреть, будет все нормально работать или нет. От версии к версии Nginx изменялись нюансы работы с фалами при gzip_static, он смотрит не только совпадающие имена у файлов, но и даты изменения, чтобы стараться отдавать клиенту актуальную версию файлов, и результат не всегда был ожидаемый. Я, обычно, с файлами на сервере в ssh сессии работаю, поэтому делаю, например, так:
Сжать все css файлы в папке: gzip -kr6 ./*.css
Выставить всем файлам одну дату изменения: touch ./*

По поводу уровня сжатия:
Где-то на Хабре статья была с замерами скорости сжатия/распаковки, накладных расходов ресурсов и времени, в зависимости от уровня сжатия, по отношению к выигрышу в размере файлов. Там хорошо было видно, что больше 5 уровня смысла жать нет. Разница в размере между 4 и 9 уровнем получается не большая, а ресурсов и времени потребляется гораздо больше. К сожалению пруф найти сейчас не могу. Для себя решил так: если архивы создаю заранее, вручную, то уровень 6, для сжатия «на лету» уровень 2.

По поводу, что сервер не стартует:
скорее всего синтаксическая ошибка в конфиге. Проверить можно в терминальной сессии командой nginx -t или попробовать перезапустить nginx в ручную: nginx -s reload или кусок конфига показать.
#39. 24 сентября 2016 года, 23:53. Виталий пишет:
Огромное спасибо! Целый день потратил, пока на Ваш сайт не попал. Очень доходчиво и просто!
Удачи!
#40. 5 ноября 2016 года, 14:39. Дмитрий пишет:
Добрый день. а можете подробнее разложить для дилетантов про:
«Убрать настройки ssl из конфигов Апача, настроить ssl на Nginx, заставить его слушать 443 порт и заворачивать все на https, настроить проксирование запросов на Apache,»
#41. 8 ноября 2016 года, 14:53. Admin пишет:
@Дмитрий
Сейчас, наверное, помочь не смогу. Услугами ру-центра больше не пользуюсь, перебрался на http://vpsvds.ru/goto/ihor.php , поэксперементировать не на чем. Когда, в последний раз, спрашивал у ТП, про возможность работы такой схемы, сказали, что нельзя так координально настройки менять — заказывайте VDS сервер и «шаманьте» на нем сколько душе угодно. Ну а у меня руки не дошли проверить.
#42. 16 января 2017 года, 14:46. Василий пишет:
С SSL не разобрались?
#43. 31 августа 2017 года, 21:30. Юрий пишет:
Огонь! Заработало! Спасибо пабрацки!
#44. 5 сентября 2017 года, 13:39. Никита пишет:
Дай Бог автору здоровья!!!!! Все заработало просто и быстро!!!!
#45. 7 сентября 2017 года, 20:46. Таня пишет:
Здравствуйте! Мне сказали Кэширование и сжатие данных (gzip) следует настраивать следующим образом:
1. Перейдите в раздел панели управления хостингом «Веб-сервер» -> «Сайты» -> «Ваш домен».
2. Включите сжатие данных изменив параметр «Сжатие данных» на «Вкл».
3. Измените значение параметра «Кэширование данных» на необходимое Вам количество часов.
Только не понятно сколько вписывать часов? И можно ли так настроить без перехода на ручной режим. Не подскажете сколько часов вписывать на авто режиме?
#46. 8 сентября 2017 года, 23:40. Admin пишет:
@Таня
Можно вписать, например, 120 часов. Если настройку делать из панели управления хостингом, то включать ручной режим не надо. Ручной режим нужен для более тонких настроек, ну и раньше, когда в панели управления хостингом не было настроек, без ручного режима было не обойтись.

Оставьте свой комментарий

Ваше имя:

Комментарий:

Для выделения используйте следующий код: [i]курсив[/i], [b]жирный[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Ссылку начните с http://. Других команд или HTML-тегов здесь нет.

Сколько будет 71+9?

Копикот сервис
Еще в разделе «Настройка хостингов»
  • Включение сжатия и кэширования на хостинге Ru-Center
По теме «Ru-Center»
  • RU-CENTER (nic.ru)
  • Включение сжатия и кэширования на хостинге Ru-Center
По теме «хостинг»
  • RU-CENTER (nic.ru)
  • Включение сжатия и кэширования на хостинге Ru-Center
Посмотрите в блоге
Ru-Center, хостинг