Инструкция как скомпилировать динамический модуль ngx_pagespeed для Nginx на Debian

Цель: Предоставить инструкцию по сборке динамического модуля, дать понимание принципа сборки динамического модуля для Nginx поставленного из репозитория Debian.

Целевая аудитория: Администраторы серверов, продвинутые администраторы сайтов, сео-оптимизаторы и просто те кто хочет добиться хорошей оценки от сервиса Google PageSpeed.

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

План действий такой:

1. Арендуем vps на час.
2. Собираем на арендованной vps динамический модуль на той же самой версии Nginx что была использована на боевом (это ВАЖНО!!! . Поддержка динамических модулей у Nginx появилась с версии 1.9.11).
3. Перекидываем модуль на новый сервер.
4. Конфигурируем Nginx.
5. Применяем настройки.
6. Замораживаем версию Nginx (Если это не сделать, то при ближайшем обновлении Nginx, произойдёт падение сервера. Причина в том что скомпилированный модуль будет работать только с конкретной версией Nginx. Если захотите обновиться, скомпилируете модуль для новой версии и обновитесь).

Или следим за тем что обновляем и своевременно добавляем новый собранный модуль.

Преимущество в том что боевой сервер не подвергается изменению и если Вам к примеру не понравится ngx_pagespeed, то вы просто уберёте строчки конфигурирующие его и сам модуль. Ну и если Вы используете несколько серверов с Nginx Вы можете один раз скомпилировать модуль для них всех.

Годные ссылки на аналогичные статьи, но не достаточно раскрытые на мой взгляд:

→ Install Nginx ngx_pagespeed Module on Ubuntu 16.04
→ How to Install Nginx and Google PageSpeed on Debian/Ubuntu
→ НАСТРОЙКА NGINX
→ ngx_pagespeed — gihub
→ Документация ngx_pagespeed

Переходим к самой инструкции.

Подключаемся к тестовому серверу по ssh.

Устанавливаем apt-src.

apt install apt-src


Добавляем репозиторий исходного кода и репозиторий пакетов с необходимой версией Nginx.У меня это Nginx/1.13.5

echo -e 'deb-src http://ftp.ru.debian.org/debian sid main\ndeb http://ftp.ru.debian.org/debian sid main' >> /etc/apt/sources.list


Обновим кэш пакетов.

apt update
apt-src update


Скачаем исходники Nginx в текущую папку.

apt-src install nginx


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

Установим необходимые зависимости для модуля:

apt install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip ca-certificates


Проверим текущую версию модуля.

Укажем версию для установки.

NPS_VERSION=1.12.34.3-stable


Скачаем исходники модуля:

wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}.zip


Распакуем в текущую папку:

unzip v${NPS_VERSION}.zip


Подготовим исходники к сборке:

cd ngx_pagespeed-${NPS_VERSION}/
NPS_RELEASE_NUMBER=${NPS_VERSION/stable/}
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.tar.gz
[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget ${psol_url}
tar -xzvf $(basename ${psol_url})


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

pwd
nano ../nginx-1.13.5/debian/rules


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

--add-dynamic-module=/root/ngx_pagespeed-1.12.34.3-stable


image

Приступаем к сборке предварительно вернувшись на уровень выше.

cd ../
apt-src build  nginx


В процессе сборки будет задан вопрос, отвечаем на него нет.

image

После успешной сборки модуль я нашёл по адресу:

./nginx-1.13.5/debian/build-extras/objs/ngx_pagespeed.so


На боевом сервере размещаем в папку:

/usr/lib/nginx/modules


Далее в файле:

/etc/nginx/nginx.conf


добавляем загрузку модуля:

load_module modules/ngx_pagespeed.so;


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

mkdir -p /var/cache/nginx/ngx_pagespeed
chown www-data:www-data /var/cache/nginx/ngx_pagespeed


# Pagespeed
 pagespeed on;
 pagespeed FileCachePath /var/cache/nginx/ngx_pagespeed;


image

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

location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
 add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }


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

pagespeed off;


Буду рад любым комментариям, если у Вас что-то не получилось, пишите. Буду дополнять статью по мере возникновения вопросов.

© Habrahabr.ru