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

Установка PageSpeed для Nginx (ngx_pagespeed) на Debian

Серверное администрирование

Установка PageSpeed для Nginx (ngx_pagespeed) на Debian

В данной статье будет рассмотрена установка и настройка модуля PageSpeed от Google в Nginx, который называется ngx_pagespeed. Данный динамический модуль представляет собой набор фильтров уменьшающих объем загружаемой страницы и позволяющих повысить скорость загрузки сайта. Оптимизация выполняется путем минимизации статических элементов, таких как CSS и JavaScript, что уменьшает время загрузки страницы. Изначально данный модуль разрабатывался компанией Google, в дальнейшем он был передан в Apache Incubator. Устанавливать все это будем на Debian. Сборка и настройка для Ubuntu практически аналогичная.

Те кто не любит читать много текста могут посмотреть видео процесса установки.

Подписывайтесь на Youtube канал

Установка Nginx PageSpeed

Собирать будем из исходников, поэтому ставим необходимые для сборки пакеты.

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.

  • 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/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.

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

01:48
18087
RSS
Нет комментариев. Ваш будет первым!

Авторизация

Войдите, используя Ваш аккаунт

Войти с помощью

Пользователи

Skyeng
GeekBrains
Lingualeo