В данной статье будет рассмотрена установка и настройка модуля PageSpeed от Google в Nginx, который называется ngx_pagespeed.
В данной статье будет рассмотрена установка и настройка модуля PageSpeed от Google в Nginx, который называется ngx_pagespeed. Данный динамический модуль представляет собой набор фильтров уменьшающих объем загружаемой страницы и позволяющих повысить скорость загрузки сайта. Оптимизация выполняется путем минимизации статических элементов, таких как CSS и JavaScript, что уменьшает время загрузки страницы. Изначально данный модуль разрабатывался компанией Google, в дальнейшем он был передан в Apache Incubator. Устанавливать все это будем на Debian. Сборка и настройка для Ubuntu практически аналогичная.
Те кто не любит читать много текста могут посмотреть видео процесса установки.
Подписывайтесь на Youtube канал
Собирать будем из исходников, поэтому ставим необходимые для сборки пакеты.
apt install build-essential zlib1g-dev libpcre3 libpcre3-devКомпилировать будем в папке /usr/src, перейдем в нее.
cd /usr/srcДля начала зайдем на Github и посмотрим последний релиз PageSpeed. Текущая версия 1.13.35.2-stable.
Скачиваем и распаковываем исходники модуля.
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.zip
unzip v1.13.35.2-stable.zipПереходим в каталог.
cd incubator-pagespeed-ngx-1.13.35.2-stable
Скачиваем и распаковываем PSOL.
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
tar -xzvf 1.13.35.2-x64.tar.gzДобавим в файл /etc/apt/sources.list официальный репозиторий для mainline-ветки Nginx.
Для Debian
deb http://nginx.org/packages/mainline/debian/ codename nginx
deb-src http://nginx.org/packages/mainline/debian/ codename nginxДля Ubuntu
deb http://nginx.org/packages/mainline/ubuntu/ codename nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ codename nginxГде codename это кодовое имя версии Ubuntu или Debian. В частности Debian 9 имеет имя stretch.

Скачиваем и устанавливаем PGP-ключ, после чего необходимо произвести обновление индекса пакетов apt.
cd /tmp/ && wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
apt updateУстанавливаем все необходимые для сборки Nginx зависимости и пакет uuid-dev.
apt build-dep nginx
apt install uuid-devСкачиваем исходники Nginx.
cd /usr/src
apt source nginxПеред началом сборки и компиляции необходимо внести изменения в конфигурационный файл.
nano /usr/src/nginx-1.15.6/debian/rulesКонфигурируем Nginx. Необходимо добавить модуль ngx_pageespeed (--add-module=/usr/src/incubator-pagespeed-ngx-1.13.35.2-stable) в содержимое секции config.status.nginx.
...
config.status.nginx: config.env.nginx
cd $(BUILDDIR_nginx) && \
CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --add-module=/usr/src/incubator-pagespeed-ngx-1.13.35.2-stable
touch $@
...
Переходим к компиляции и сборке deb-пакета Nginx.
cd /usr/src/nginx-1.15.6
dpkg-buildpackage -rfakeroot -uc -bЕсли в процессе не было ошибок, то в каталоге /usr/src мы увидим собранные deb-пакеты.
Если у вас уже установлен Nginx, удалите его.
apt remove nginx nginx-full nginx-common
apt autoremoveУстанавливаем наш скомпилированный пакет, для этого необходимо сделать следующее.
cd ..
dpkg -i nginx_1.15.6-1~stretch_amd64.debЗапускаем Nginx.
service nginx startПроверить работоспособность нашего веб-сервера можно с помощью команды curl. Установим ее.
apt install curlВыполните:
curl -I 127.0.0.1
Вы должны увидеть следующее.
...
HTTP/1.1 200 OK
Server: nginx/1.15.6
...Теперь нам необходимо настроить модуль ngx_pagespeed.
Модуль PageSpeed имеет множество настроек для оптимизации страницы, которые называются фильтрами. Для простоты управления, фильтры в PageSpeed объединены в структуры — уровни, которые можно задать с помощью параметра RewriteLevel.
В зависимости от необходимого функционала модуля Nginx PageSpeed, с помощью директивы RewriteLevel мы можем задать три уровня его работы: CoreFilters, OptimizeForBandwidth и PassThrough.
Каждый из этих уровней оптимизации, содержит набор фильтров для работы PageSpeed. Поэтому, вместо того чтобы самостоятельно перечислять все необходимые фильтры в конфигурационном файле Nginx, можно сначала указать параметр RewriteLevel, а затем уже дополнить его своими фильтрами.Для того чтобы посмотреть, какие фильтры находятся в CoreFilters и OptimizeForBandwidth, а какие нужно добавить вручную, необходимо посмотреть таблицу RewriteLevel.С помощью EnableFilters или ForbidFilters можно включать или отключать фильтры. Директивы позволяют указать имя одного или нескольких фильтров через запятую.
pagespeed EnableFilters rewrite_css,rewrite_javascript;
pagespeed DisableFilters rewrite_css,rewrite_javascript;Для начала возьмем минимальный набор параметров для работы PageSpeed в Nginx, затем дополним настройки фильтрами указанными вручную. Для этого нам понадобится внести изменения в конфигурационный файл Nginx.Откройте файл nginx.conf.
nano /etc/nginx/nginx.confЧтобы включить PageSpeed в Nginx и задать параметры кэширования, необходимо установить настройки.
pagespeed on;
# Путь к каталогу кэша
pagespeed FileCachePath "/var/run/ngx_pagespeed/";
# Максимальный размер кэша
pagespeed FileCacheSizeKb 1024000;
# Интервал для очистки кэша
pagespeed FileCacheCleanIntervalMs 300000;
# Максимальное количество дескрипторов
pagespeed FileCacheInodeLimit 500000;Для улучшения производительности можно хранить файлы кэша на RAM-диске. В Ubuntu или Debian можно использовать каталог /var/run, который монтируется в оперативную память как tmpfs. Размер кэша будет зависеть от количества свободной памяти в системе. Процедура удаления кэша выполняется через заданный в FileCacheCleanIntervalMs интервал времени, если его размер становится больше FileCacheSizeKb или количество используемых дескрипторов приблизилось к максимальному значению FileCacheInodeLimit.
Также, конечно, можно в качестве директории кэша использовать и обычную директорию на диске. Тогда FileCachePath будет выглядеть как то так.
pagespeed FileCachePath "/var/cache/ngx_pagespeed/";В этом случае необходимо создать директорию /var/cache/ngx_pagespeed/
mkdir /var/cache/ngx_pagespeed/
chown nginx:nginx /var/cache/ngx_pagespeed/В итоге файл /etc/nginx/nginx.conf может выглядеть так.
http {
...
pagespeed on;
pagespeed FileCachePath "/var/cache/ngx_pagespeed/";
# Настройки фильтров
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters collapse_whitespace,remove_comments;
pagespeed DisableFilters rewrite_images;
...
}Дополнительно к CoreFilters, мы добавляем фильтры для минизации и удаления комментариев из HTML-кода страницы. Чтобы снизить нагрузку на сервер, я отключил фильтр для сжатия изображений, который по умолчанию включен в CoreFilters. Вы можете добавить или отключить любые фильтры по своему усмотрению. В процессе настройки PageSpeed, будет полезна таблица с описанием фильтров.

Также можно в файле /etc/nginx/nginx.conf раскоментировать строчку gzip on, как на картинке выше. Это поможет еще сильней ускорить ваш сайт.
Если у вас будет несколько сайтов и для каждого из них необходимо применить разные наборы фильтров, то настройки фильтров можно вынести в настройки сайта. Например в файл /etc/nginx/sites-enabled/default.conf. Тогда он будет таким.
server {
...
# Настройки фильтров
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters collapse_whitespace,remove_comments;
pagespeed DisableFilters rewrite_images;
# Адрес и директория сайта
pagespeed LoadFromFile "http://example.com/" "/var/www/example/html/";
...
}Следует отметить, что для оптимизации CSS и JavaScript файлов, может понадобиться в директиве LoadFromFile указать адрес и путь к каталогу вашего сайта.
Вот еще для примера. На этом сайте я использую следующую конфигурацию.
http {
...
pagespeed on;
pagespeed FileCachePath "/var/cache/ngx_pagespeed/";
pagespeed EnableFilters combine_css,combine_javascript,combine_heads,defer_javascript,rewrite_css,rewrite_javascript,remove_quotes,collapse_whitespace,remove_comments,trim_urls,rewrite_images,inline_images,recompress_jpeg,recompress_png,resize_images;
pagespeed DisableFilters defer_javascript;
pagespeed JpegRecompressionQuality 85;
pagespeed ImageRecompressionQuality 85;
pagespeed ImageInlineMaxBytes 2048;
pagespeed LowercaseHtmlNames on;
...
}Снова перезагружаем Nginx.
service nginx reloadПроверяем с помощью curl.
curl -I 127.0.0.1
Как видите ответ немного изменился. Появилась строка.
X-Page-Speed: 1.13.35.2-0Далее откроем браузер и перейдем на наш сайт. Вы должны увидеть приветственную страницу Nginx.

И в заключении результат этого сайта в Google PageSpeed Insights.

Вот и все, если есть вопросы, дополнения или нашли ошибки в тексте пишите комментарии.