Целевая аудитория: Администраторы серверов, продвинутые администраторы сайтов, сео-оптимизаторы и просто те кто хочет добиться хорошей оценки от сервиса 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
Приступаем к сборке предварительно вернувшись на уровень выше.
cd ../
apt-src build nginx
В процессе сборки будет задан вопрос, отвечаем на него нет.
После успешной сборки модуль я нашёл по адресу:
./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;
В виртуальном хосте сайтов на которых мы хотим чтобы работал модуль добавляем:
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
В виртуальные хосты сайтов на которых он не должен работать добавляем:
pagespeed off;
Буду рад любым комментариям, если у Вас что-то не получилось, пишите. Буду дополнять статью по мере возникновения вопросов.
Комментарии (29)
Sovigod
12.10.2017 08:37+1Ручное компилирование и раскладывание библиотеки по серверам? Вы прям в 2005 год ушли.
А как же автоматизация, оркестрация и тестирование? Тут лучше бы подошел плейбук для ansible или что-то подобное, как цель этой статьи. Что бы проблем с обновлением не было.
И укажите линк на оригинал интрукции по сборке. Она ведь меняется иногда.castomi Автор
12.10.2017 11:42Линк указан, на гитхабе инструкция. Вернее ссылка на неё.
И к тому же я планирую поддерживать данную инструкцию в актуальном состоянии.Sovigod
12.10.2017 12:36В актуальном состоянии? Актуально клонировать исходники одной командой. А не держать лишнюю копипасту.
bash <(curl -f -L -sS https://ngxpagespeed.com/install)
castomi Автор
12.10.2017 12:49Я не пробовал, но для Nginx из репозитория Debian это скорее всего не подойдёт, а статья именно о нём. О том как собирать Nginx из официальных реп nginx инфы хватает.
berezuev
12.10.2017 10:40+1Банальной настройкой конфигов Nginx и грамотной версткой балл GPSI можно поднять в зеленую зону без всяких левых плагинов.
castomi Автор
12.10.2017 11:45Согласен, так не просто можно, так правильнее на мой взгляд.
Данный способ хорош когда до этого всё делал не правильно, а теперь вдруг нужен быстрый результат. И сеошники поговаривают что сайты с включённым модулем особенно учитываются при ранжировании, правда лично я 100% доказательств этого не встречал, это больше домыслы.berezuev
12.10.2017 11:58+1Все сеошники должны гореть спички жидкость для розжига противопожарные системы не дорого в аду)
Ну и, добавить с десяток строчек в конфиг и сделать минифакцию всего — это явно быстрее, чем проводить все манипуляции из статьи. Некоторые уникумы даже умудряются за это брать по 100000 руб.castomi Автор
12.10.2017 12:02Все сеошники должны гореть спички жидкость для розжига противопожарные системы не дорого в аду)
Я отношусь к этому несколько более спокойно)
Некоторые уникумы даже умудряются за это брать по 100000 руб.
Ну они же наверное там не только ngx_pagespeed настраивают?)) Хотя конечно 100к это ни чё так деньги. Я беру за полную настройку сервера от 5к)))), причём за эти деньги я даю серьёзное ускорение даже на тарифе младше первоначального. Может мне пора повышать цены?)))
Alexmaru
12.10.2017 11:47+1А ещё он есть в dotdeb, и к слову — под pagespeed всё равно нужно переделывать сайт, чтобы он отдавал больше статики (и не с private заголовками), иначе ему приходится анализировать и сравнивать каждый ответ, что быстро приводит и к перенагрузке, и к медленному ответу сервера.
Сразу нужно сайт проектировать, чтобы всё компилировалось, и картинки пересжимались.
В общем, довольно опасный пакет.
castomi Автор
12.10.2017 11:52А ещё он есть в dotdeb
Не знал, правда в моём случае эта информация никак не помогает, ведь у меня Debian 9, а Nginx из unstable репозитория. Но спасибо за инфу, я наверное чуть позже допишу эту информацию в статью, предварительно только проверю как оно там пашет.
В общем, довольно опасный пакет.
Не могу с Вами не согласиться, именно поэтому я и писал эту инструкцию, чтобы на боевом сервере ничего не менялось. Быстро добавил модуль, попробовал, посмотрел, не понравилось, так же быстро убрал. Но детальном конфигурировании даёт хорошие показатели.
что быстро приводит и к перенагрузке, и к медленному ответу сервера
На практике ответ сервера увеличивается примерно на 40мс, не скажу что это сильно критично, многое зависит от качества настройки. Ну и мощности Вашего сервера.
kernUSR
12.10.2017 11:53Статья хороша для совсем несмыслящих в настройке сервера. Разжовано всё по полочкам!
Но, лично я, не вижу смысла в этой статье, т.к. подобных статей уйма. А вот статей о настройке пэйджспида, с таким подробным объяснением, днём с огнём не сыщишь! (во всяком случае в рускоязычном сегменте интернета)castomi Автор
12.10.2017 11:58Но, лично я, не вижу смысла в этой статье, т.к. подобных статей уйма.
У данной статьи есть несколько особенностьей.
1. Я нассказываю как скомпилировать модуль из исходников Nginx взятых из репозиторией Debian, то есть данный модуль можно будет подкинуть всем кто использует Nginx не из официальных реп Nginx, а из официальных реп Debian. Процесс сборки несколько отличается.
2. Я показываю как собирать именно динамический модуль.
Разжовано всё по полочкам!
Старался, хотя думаю вопросы у новичков всё равно будут.
А вот статей о настройке пэйджспида, с таким подробным объяснением, днём с огнём не сыщишь! (во всяком случае в рускоязычном сегменте интернета)
Это да, но есть же документация официальная. Я дал на неё ссылку. Да она на забугорном, но в принципе всё понятно. Может найдутся желающие заняться её переводом, но я не рискну)
castomi Автор
12.10.2017 11:54Прошу прощения, я тут чей-то комментарий случайно отклонил, парень писал о том что года два назад пробовал этот модуль, я тыкал чтобы ответить ему, а там не ответить, а отклонить. Если Вы читаете это, напишите пожалуйста комментарий снова. Ещё раз прошу прощения.
VBart
12.10.2017 17:09+1В попытках делать на лету то, что при грамотном подходе должно происходить единожды при развертывании новой версии сайта, может легко привести к крайне низкой производительности, высокому потреблению памяти и проблемам со стабильностью. Зато попугаи в неком сервисе будут радовать глаз и не важно, что сайт тормозит и ложиться под нагрузкой.
castomi Автор
12.10.2017 17:19может легко привести к крайне низкой производительности
Всё что делаешь может привести к низкой производительности. Логично что если коряво настроено то будет плохо.
ато попугаи в неком сервисе будут радовать глаз и не важно, что сайт тормозит и ложиться под нагрузкой.
Во всём Важен баланс, я не говорил что циферки это главное.VBart
12.10.2017 18:50+1Люди, включающие pagespeed и удивляющиеся почему nginx на 10 rps начинает упираться в cpu, приходят периодически.
castomi Автор
12.10.2017 19:22Да крайние случаи встречаются везде)), я понимаю о чём Вы говорите. Я вообще считаю что лучше нормально оптимизировать контент и не делать прослоек. Это реально самый правильный путь. Но когда проект уже в деле не первый месяц и там куча контента, переделывать стоит денег и заказчик таким образом экономит)).
darken99
13.10.2017 13:44Скупой всегда платит дважды.
А для себя я давно решил со скупыми не работать.castomi Автор
13.10.2017 14:47Я бы с удовольствием жил бы по таким же правилам. Но моё имя пока ещё не гремит чтобы люди выстраивались ко мне в очередь). Довольствуюсь теми заказами которые есть. Ладно бы жил один, а так ещё семья. Могу только завидовать белой завистью).
idcooldi
12.10.2017 17:19Я пользовался этой документацией года два-три назад, причём там есть как для nginx так и для apache
Code5
и зачем это? статья так и не раскрыла для чего нужен этот модуль
castomi Автор
Ну так в целях статьи и не планировалось раскрывать для чего он нужен. В статье есть ссылка на документацию, а если кратно, он помогает повысить оценку Google PageSpeed.
Прям всё раскрыть это надо книгу писать, если будут возникать вопросы, буду дополнять.
kernUSR
Простите, но это звучит бредово. Да, оценка повышается, но какой профит от этих попугаев? Вы ведь сайт оптимизируете не ради оценки, а для клиентов!
Если уж говорить кратко о пользе модуля, то он увеличивает скорость загрузки страниц сайта за счёт сжатия js и css, оптимизации изображений, использование браузерного кэша (подставляет заголовки Expires, Cache-Control, Last-Modified). И всё это без вмешательства в код проекта. Так же этот модуль имеет встроенный механизм кэширования на стороне сервера, что значительно снижает нагрузку на сервер при запросах контента клиентами.
Ели вникать в технологию, с подробным разбором и примерами, то тут и на 3х-томник можно набрать =).
castomi Автор
Есть. И Вы их сами перечислили. И это далеко не всё, я сам ещё все доки не прочитал…
Я да, правда есть и такие которым не важно что там творится на сайте лишь бы циферку по больше увидеть))
Это да. Буду дополнять то что не понятно.