Ранее я уже описывал процесс установки Nginx с поддержкой модуля ngx_pagespeed
из исходников. В этой статье я опишу процесс настройки параметров PageSpeed для Nginx. Модуль PageSpeed представляет собой набор фильтров для оптимизации и ускорения загрузки страниц и связанных с ними объектов: CSS, JavaScript, изображений.
Модуль PageSpeed имеет большое количество настроек для оптимизации содержимого страницы, которые дальше я буду называть фильтрами. Для удобства управления модулем, фильтры в PageSpeed объединены в логические структуры — уровни, которые можно задать с помощью параметра RewriteLevel
.
Описание настроек PageSpeed
В зависимости от требуемого функционала модуля Nginx PageSpeed, с помощью директивы RewriteLevel
мы можем задать три основных уровня его работы: CoreFilters
, OptimizeForBandwidth
и PassThrough
.
- CoreFilters — задает максимальный набор фильтров, которые по мнению разработчиков, подойдут для работы большинства сайтов;
- OptimizeForBandwidth — задает минимальный набор фильтров, которые в основном ограничены оптимизацией внешних CSS и JavaScript файлов страницы;
- PassThrough — «сквозной режим», данный уровень настройки полностью отключает все используемые фильтры PageSpeed.
Каждый из перечисленных уровней оптимизации, содержит стандартный набор фильтров для работы PageSpeed. Поэтому, вместо того чтобы самостоятельно перечислять все необходимые фильтры в конфиге Nginx, сначала укажем параметр RewriteLevel
, а затем уже дополним его своими фильтрами.
Для того чтобы понять, какие фильтры уже содержат CoreFilters
и OptimizeForBandwidth
, а какие нужно добавить самостоятельно, необходимо использовать таблицу RewriteLevel.
С помощью EnableFilters
или ForbidFilters
можно добавить или удалить выбранные фильтры. Директивы позволяют указать в качестве параметра название одного или нескольких разделенных запятыми фильтров:
pagespeed EnableFilters rewrite_css,rewrite_javascript; pagespeed DisableFilters rewrite_css,rewrite_javascript;
Настройка PageSpeed в Nginx
Для начала возьмем минимальный набор параметров для работы PageSpeed в Nginx, затем дополним настройки фильтрами указанными вручную. Для этого нам понадобится внести изменения в конфигурационный файл Nginx.
Откройте файл nginx.conf
:
nano /etc/nginx/nginx.conf
Чтобы включить PageSpeed в Nginx и задать параметры кэширования, необходимо указать следующие настройки:
pagespeed on; # Путь к каталогу кэша pagespeed FileCachePath "/var/run/pagespeed-cache/"; # Максимальный размер кэша pagespeed FileCacheSizeKb 102400; # Интервал для очистки кэша pagespeed FileCacheCleanIntervalMs 360000; # Максимальное количество дескрипторов pagespeed FileCacheInodeLimit 500000;
Для улучшения производительность Nginx, мы будем хранить файлы кэша PageSpeed на RAM-диске. В Debian можно использовать каталог /var/run
, который смонтирован в оперативной памяти как tmpfs. Размер кэша зависит от количества свободной памяти в системе.
Процедура очистки кэша запускается через заданный в FileCacheCleanIntervalMs
промежуток времени, если его размер превышает значение FileCacheSizeKb
или количество используемых дескрипторов приблизилось к предельному значению FileCacheInodeLimit
.
Далее необходимо настроить фильтры PageSpeed для нашего сайта. Откройте конфигурационный файл виртуального хоста Nginx:
nano /etc/nginx/sites-enabled/default.conf
Мы задаем для RewriteLevel
шаблон CoreFilters
, который затем дополняем своими фильтрами:
server { listen 80; server_name example.com; root /www/example/html/; index index.html index.htm; } # Настройки фильтров pagespeed RewriteLevel CoreFilters; pagespeed EnableFilters collapse_whitespace,remove_comments; pagespeed DisableFilters rewrite_images; # Адрес и директория сайта pagespeed LoadFromFile "http://example.com/" "/www/example/html/"; }
Дополнительно к CoreFilters
, мы добавляем фильтры для минификации и удаления комментариев из HTML-кода страницы. Чтобы снизить нагрузку на сервер, я отключил фильтр для сжатия изображений, который по умолчанию включен в CoreFilters
. Вы можете добавить или отключить любые фильтры по своему усмотрению. В процессе настройки PageSpeed, будет полезна таблица с описанием фильтров.
Следует отметить, что для оптимизации CSS и JavaScript файлов, необходимо в директиве LoadFromFile
указать адрес и путь к каталогу вашего сайта.
Проверяем конфигурацию Nginx и применяем настройки:
nginx -t service nginx reload
Для проверки работы PageSpeed, необходимо предварительно очистить кэш браузера. Для Chrome можно использовать горячие клавиши Ctrl + F5.
Из своего опыта, могу отметить следующее. Фильтры rewrite_css
и combine_javascript
не всегда объединяют несколько файлов в один. Но можно убедиться, что данные фильтры работают, если загрузить на сервер специально подготовленную страницу.