Настройка PageSpeed в Nginx.

pagespeed ngx_pagespeed nginx ubuntu

В предыдущей статье я описал установку сервера Nginx с PageSpeed модулем от Google, ускоряющим и оптимизирующим работу сайта. В этой статье рассмотрим настройку модуля для использования на сайте.

Все параметры могут быть добавлены в контекст http {} файла nginx.conf, но в таком случае действие Pagespeed будет распространяться на все сайты находящиеся на сервере. Если Pagespeed нужен только для конкретного сайта, то лучше всего будет прописать настройки в контексте server {} обслуживающим нужный сайт.

Я, например, прописываю все в отдельном файле, и подключаю его через include, куда надо.

Чтобы активировать модуль достаточно добавить директиву pagespeed со значением on, значение off, соответственно, выключит PageSpeed. Помимо этого следует добавить pagespeed FileCachePath, для указания каталога кэша преобразованных файлов. Указанный каталог будет создан автоматически после перезапуска сервера.

Это минимальный набор опций, которого достаточно для запуска и работы PageSpeed. Работу модуля можно проверить следующим образом. Откройте сайт в браузере, включите режим разработчика и посмотрите заголовки. В Response Headers должно появиться x-page-speed:1.12.34.2-0.

pagespeed ngx_pagespeed nginx

На данный момент PageSpeed работает без дополнительных настроек. Но при этом делает все что должен: изображения сжимаются, код (HTML, CSS, JS) оптимизируется и т.д. Все это связано с дефолтным уровнем конфигурации.

Для облегчения настройки PageSpeed имеет три уровня конфигурации.

  • CoreFilters - максимальный набор фильтров подходящий для работы большинства сайтов. Является уровнем по умолчанию и активируется при запуске PageSpeed без дополнительных настроек.
  • OptimizeForBandwidth - минимальный набор фильтров. В основном оптимизирует и сжимает код.
  • PassThrough - полностью отключает все фильтры.

Уровни определяются директивой pagespeed RewriteLevel.

Каждый уровень может быть изменен под себя, с помощью добавления нужных или исключения ненужных фильтров.

Директива pagespeed DisableFilters исключает фильтры из конфигурации, а pagespeed EnableFilters добавляет. Фильтры указываются через запятую, например так.

Например мы хотим использовать уровень CoreFilters, но нас не все устраивает. Нам не нужно сжимать изображения и объединять CSS файлы в один. Но зато нужно встроить стили google-шрифтов непосредственно в HTML документ.

В таком случае конфигурация будет выглядеть так.

Чтобы полностью запретить использование определенного фильтра и исключить его из всех конфигураций используется директива pagespeed ForbidFilters. Например для полного запрета использования фильтра resize_mobile_images нужно сделать так.

CoreFilters включает в себя следующий набор фильтров, который я хочу разобрать на примере своего сайта.

Ненужные мне фильтры я буду исключать из конфигурации, чтобы не производить лишней нагрузки на сервер.

Add Head исключаю, потому как сайт на WordPress, страницы генерируются по шаблонам, <head> присутствует всегда, следовательно добавлять его не надо.

Фильтр Convert Gif to Png тоже удаляю, у меня используется всего два gif файла, оба файла с анимацией, а к анимированным gif данный фильтр не применяется.

Convert Meta Tags удаляю, сколько не смотрел, а метатегов с атрибутом http-equiv у меня на страницах нет.

Convert Png to Jpeg не нужен, у себя на сайте я не использую png, только jpg формат.

Jpeg Subsampling и Recompress Png отключаю за ненадобностью, так же как и Resize Images, WordPress по умолчанию уменьшает размеры изображений при загрузке и добавляет файлы нужного размера.

Все остальное оставляю на месте. В итоге получилось следующее.

С такой конфигурацией сайт набирает 97/100 в тесте PageSpeed Insights, остается только перенести CSS из шапки в подвал сайта, но этим мне заниматься неохота, меня и так устраивает, хотя это сильно влияет на оценку мобильных страниц, там всего лишь 76 баллов.

ngx_pagespeed pagespeed nginx ubuntu

Узнать какие наборы фильтров входят в уровни CoreFilters и OptimizeForBandwidth можно здесь, там же расписано для чего нужен тот или иной фильтр. Вся документация находится здесь.

Вернемся к минимальной конфигурации из начала статьи.

Чтобы постоянно не сжимать и переписывать файлы, тем самым нагружая сервер, PageSpeed кэширует ресурсы сохраняя их в указанном каталоге.

Кэшем можно и нужно управлять. На сайтах с большим количеством посетителей и трафика, кэш может разрастись и заполнить весь диск, поскольку изначально никаких ограничений на использование диска не устанавливается.

Основные директивы для управления кэшем.

  • pagespeed FileCacheSizeKb - задает максимальный размер кэша в килобайтах.
  • pagespeed FileCacheCleanIntervalMs - задает интервал очистки кэша в миллисекундах.
  • pagespeed FileCacheInodeLimit - задает лимит индексных дескрипторов (inode) по достижению которого кэш будет очищен.

Подобная конфигурация будет работать следующим образом. Процесс очистки кэша будет запускаться каждый час, согласно заданного интервала, но очищаться кэш будет не всегда. Кэш будет очищен только в том случае, если его размер превысит заданные лимиты в 102 мегабайта или в 500000 inodes. Подробнее про настройку кэша можно прочитать здесь.

Последнее что заслуживает внимания - консоль PageSpeed. Консоль или админ панель, это набор графиков, гистограмм и прочих инструментов позволяющих просматривать статистику работы модуля и вовремя узнавать о проблемах.

Чтобы активировать консоль, добавьте следующие настройки в конфигурацию PageSpeed.

Админ панель станет доступна по адресу yourdomain.com/pagespeed_admin/. Подробнее о настройках консоли можно прочитать здесь.

В итоге у меня получился вот такой файл настроек PageSpeed.

На этом все. Спасибо за внимание.