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

  • Tutorial
Цель: Предоставить инструкцию по сборке динамического модуля, дать понимание принципа сборки динамического модуля для 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
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;

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 29
  • +2
    и зачем это? статья так и не раскрыла для чего нужен этот модуль
    • +1
      Ну так в целях статьи и не планировалось раскрывать для чего он нужен. В статье есть ссылка на документацию, а если кратно, он помогает повысить оценку Google PageSpeed.
      Прям всё раскрыть это надо книгу писать, если будут возникать вопросы, буду дополнять.
      • –1
        он помогает повысить оценку Google PageSpeed

        Простите, но это звучит бредово. Да, оценка повышается, но какой профит от этих попугаев? Вы ведь сайт оптимизируете не ради оценки, а для клиентов!
        Если уж говорить кратко о пользе модуля, то он увеличивает скорость загрузки страниц сайта за счёт сжатия js и css, оптимизации изображений, использование браузерного кэша (подставляет заголовки Expires, Cache-Control, Last-Modified). И всё это без вмешательства в код проекта. Так же этот модуль имеет встроенный механизм кэширования на стороне сервера, что значительно снижает нагрузку на сервер при запросах контента клиентами.

        Прям всё раскрыть это надо книгу писать

        Ели вникать в технологию, с подробным разбором и примерами, то тут и на 3х-томник можно набрать =).
        • –1
          Простите, но это звучит бредово.
          Сходите в документацию и посмотрите, там нет ничего бредового.

          Да, оценка повышается, но какой профит от этих попугаев?
          Есть. И Вы их сами перечислили. И это далеко не всё, я сам ещё все доки не прочитал…

          Вы ведь сайт оптимизируете не ради оценки, а для клиентов!
          Я да, правда есть и такие которым не важно что там творится на сайте лишь бы циферку по больше увидеть))

          Ели вникать в технологию, с подробным разбором и примерами, то тут и на 3х-томник можно набрать =).
          Это да. Буду дополнять то что не понятно.
    • +1
      Ручное компилирование и раскладывание библиотеки по серверам? Вы прям в 2005 год ушли.
      А как же автоматизация, оркестрация и тестирование? Тут лучше бы подошел плейбук для ansible или что-то подобное, как цель этой статьи. Что бы проблем с обновлением не было.

      И укажите линк на оригинал интрукции по сборке. Она ведь меняется иногда.
      • 0
        Линк указан, на гитхабе инструкция. Вернее ссылка на неё.
        И к тому же я планирую поддерживать данную инструкцию в актуальном состоянии.
        • 0
          В актуальном состоянии? Актуально клонировать исходники одной командой. А не держать лишнюю копипасту.
          bash <(curl -f -L -sS https://ngxpagespeed.com/install)
          • 0
            Я не пробовал, но для Nginx из репозитория Debian это скорее всего не подойдёт, а статья именно о нём. О том как собирать Nginx из официальных реп nginx инфы хватает.
      • +2

        Банальной настройкой конфигов Nginx и грамотной версткой балл GPSI можно поднять в зеленую зону без всяких левых плагинов.

        • 0
          Согласен, так не просто можно, так правильнее на мой взгляд.
          Данный способ хорош когда до этого всё делал не правильно, а теперь вдруг нужен быстрый результат. И сеошники поговаривают что сайты с включённым модулем особенно учитываются при ранжировании, правда лично я 100% доказательств этого не встречал, это больше домыслы.
          • +2
            Все сеошники должны гореть спички жидкость для розжига противопожарные системы не дорого в аду)

            Ну и, добавить с десяток строчек в конфиг и сделать минифакцию всего — это явно быстрее, чем проводить все манипуляции из статьи. Некоторые уникумы даже умудряются за это брать по 100000 руб.
            • –2
              Все сеошники должны гореть спички жидкость для розжига противопожарные системы не дорого в аду)
              Я отношусь к этому несколько более спокойно)

              Некоторые уникумы даже умудряются за это брать по 100000 руб.
              Ну они же наверное там не только ngx_pagespeed настраивают?)) Хотя конечно 100к это ни чё так деньги. Я беру за полную настройку сервера от 5к)))), причём за эти деньги я даю серьёзное ускорение даже на тарифе младше первоначального. Может мне пора повышать цены?)))
        • 0
          Сделайте пакет под debian, раз уж под него инструкция. Как раз можно, даже нужно, сделать проверку зависимостей от нужной версии nginx.
          • –1
            Идея хорошая, но заниматься подобным нет желания.
          • +2

            А ещё он есть в dotdeb, и к слову — под pagespeed всё равно нужно переделывать сайт, чтобы он отдавал больше статики (и не с private заголовками), иначе ему приходится анализировать и сравнивать каждый ответ, что быстро приводит и к перенагрузке, и к медленному ответу сервера.


            Сразу нужно сайт проектировать, чтобы всё компилировалось, и картинки пересжимались.


            В общем, довольно опасный пакет.

            • 0
              А ещё он есть в dotdeb
              Не знал, правда в моём случае эта информация никак не помогает, ведь у меня Debian 9, а Nginx из unstable репозитория. Но спасибо за инфу, я наверное чуть позже допишу эту информацию в статью, предварительно только проверю как оно там пашет.

              В общем, довольно опасный пакет.

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

              что быстро приводит и к перенагрузке, и к медленному ответу сервера

              На практике ответ сервера увеличивается примерно на 40мс, не скажу что это сильно критично, многое зависит от качества настройки. Ну и мощности Вашего сервера.
            • +1
              Статья хороша для совсем несмыслящих в настройке сервера. Разжовано всё по полочкам!
              Но, лично я, не вижу смысла в этой статье, т.к. подобных статей уйма. А вот статей о настройке пэйджспида, с таким подробным объяснением, днём с огнём не сыщишь! (во всяком случае в рускоязычном сегменте интернета)
              • 0
                Но, лично я, не вижу смысла в этой статье, т.к. подобных статей уйма.

                У данной статьи есть несколько особенностьей.
                1. Я нассказываю как скомпилировать модуль из исходников Nginx взятых из репозиторией Debian, то есть данный модуль можно будет подкинуть всем кто использует Nginx не из официальных реп Nginx, а из официальных реп Debian. Процесс сборки несколько отличается.
                2. Я показываю как собирать именно динамический модуль.

                Разжовано всё по полочкам!
                Старался, хотя думаю вопросы у новичков всё равно будут.

                А вот статей о настройке пэйджспида, с таким подробным объяснением, днём с огнём не сыщишь! (во всяком случае в рускоязычном сегменте интернета)

                Это да, но есть же документация официальная. Я дал на неё ссылку. Да она на забугорном, но в принципе всё понятно. Может найдутся желающие заняться её переводом, но я не рискну)
              • 0
                Прошу прощения, я тут чей-то комментарий случайно отклонил, парень писал о том что года два назад пробовал этот модуль, я тыкал чтобы ответить ему, а там не ответить, а отклонить. Если Вы читаете это, напишите пожалуйста комментарий снова. Ещё раз прошу прощения.
                • +2
                  В попытках делать на лету то, что при грамотном подходе должно происходить единожды при развертывании новой версии сайта, может легко привести к крайне низкой производительности, высокому потреблению памяти и проблемам со стабильностью. Зато попугаи в неком сервисе будут радовать глаз и не важно, что сайт тормозит и ложиться под нагрузкой.
                  • 0
                    может легко привести к крайне низкой производительности
                    Всё что делаешь может привести к низкой производительности. Логично что если коряво настроено то будет плохо.

                    ато попугаи в неком сервисе будут радовать глаз и не важно, что сайт тормозит и ложиться под нагрузкой.
                    Во всём Важен баланс, я не говорил что циферки это главное.
                    • +1
                      Люди, включающие pagespeed и удивляющиеся почему nginx на 10 rps начинает упираться в cpu, приходят периодически.
                      • 0
                        Да крайние случаи встречаются везде)), я понимаю о чём Вы говорите. Я вообще считаю что лучше нормально оптимизировать контент и не делать прослоек. Это реально самый правильный путь. Но когда проект уже в деле не первый месяц и там куча контента, переделывать стоит денег и заказчик таким образом экономит)).
                        • 0

                          Скупой всегда платит дважды.
                          А для себя я давно решил со скупыми не работать.

                          • 0
                            Я бы с удовольствием жил бы по таким же правилам. Но моё имя пока ещё не гремит чтобы люди выстраивались ко мне в очередь). Довольствуюсь теми заказами которые есть. Ладно бы жил один, а так ещё семья. Могу только завидовать белой завистью).
                        • 0
                          Но ведь можно кешировать результат его работы :)
                          • 0
                            Он сам кэширует результат своей работы, причём когда оперативки достаточно я даже пихаю кэш в оперативку.
                    • 0
                      Я пользовался этой документацией года два-три назад, причём там есть как для nginx так и для apache
                      • 0
                        Да, я дал ссылочку на гитхаб. С него есть ссылка которую Вы дали.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.