Сборка Nginx с модулем PageSpeed в .deb для Ubuntu 16.04
Введение
Nginx — это высокопроизводительный HTTP-сервер, обратный прокси и прокси для IMAP/POP3 с открытым исходным кодом. Отличается стабильностью, богатым набором функций, простой конфигурацией и низким потреблением памяти.
PageSpeed — модуль от Google для оптимизации скорости ответа веб‑сервера, автоматического преобразования HTML и снижения времени загрузки страниц. Основные возможности ngx_pagespeed:
- Оптимизация изображений: удаление метаданных, динамическое изменение размеров, рекомпрессия.
- Минификация, объединение, инлайн и вынос CSS и JavaScript.
- Инлайнинг мелких ресурсов.
- Отложенная загрузка изображений и JavaScript.
- Переписывание HTML.
- Продление времени жизни кэша.
Подробнее: https://developers.google.com/speed/pagespeed/module/.
Важно: модули Nginx в классических сборках (особенно старых) не загружаются динамически — их обычно включают при сборке пакета. Этот туториал демонстрирует именно такую сборку.
Предварительные требования
- Ubuntu Server 16.04 — 64‑бит
- Права root (или sudo)
Что мы сделаем:
- Установим пакеты, необходимые для сборки.
- Соберём Nginx с ngx_pagespeed и упакуем в .deb.
- Выполним тестирование и базовую проверку.
Установка зависимостей для сборки
sudo apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzipУстановка Nginx с ngx_pagespeed
Шаг 1 — добавление репозитория nginx
Создайте новый файл репозитория /etc/apt/sources.list.d/nginx.list с помощью vim:
vim /etc/apt/sources.list.d/nginx.listВставьте туда строки:
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginxСохраните файл и выйдите из редактора.
Добавьте GPG‑ключ и обновите кэши пакетов:
sudo sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
sudo apt-get updateШаг 2 — загрузка исходников nginx 1.10 из репозитория Ubuntu
Создайте каталог для исходников и загрузите их:
cd ~
mkdir -p ~/new/nginx_source/
cd ~/new/nginx_source/
apt-get source nginxИногда возникает ошибка «packages cannot be authenticated». Если это произошло, можно очистить списки и обновить:
rm -rf /var/lib/apt/lists/
apt-get updateУстановите зависимости для сборки пакета:
apt-get build-dep nginxШаг 3 — загрузка PageSpeed
Создайте каталог для ngx_pagespeed и скачайте исходники. В этом примере используется версия pagespeed 1.11.33.
mkdir -p ~/new/ngx_pagespeed/
cd ~/new/ngx_pagespeed/
ngx_version= 1.11.33.3
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${ngx_version}-beta.zip
unzip release-${ngx_version}-beta.zip
cd ngx_pagespeed-release-${ngx_version}-beta/
wget https://dl.google.com/dl/page-speed/psol/${ngx_version}.tar.gz
tar -xzvf ${ngx_version}.tar.gzПримечание: в коде выше переменная ngx_version использована как в исходном примере; при необходимости корректно задайте значение без пробелов.
Шаг 4 — включение модуля PageSpeed в процесс сборки nginx
Перейдите в папку исходников nginx и отредактируйте файл debian/rules:
cd ~/new/nginx_source/nginx-1.10.1/debian/
vim rulesДобавьте новую строку под COMMON_CONFIGURE_ARGS:
--add-module=../../ngx_pagespeed/ngx_pagespeed-release-1.11.33.3-beta \Сохраните и выйдите.

Шаг 5 — сборка .deb пакета и установка
Перейдите в каталог исходников nginx и запустите сборку пакета:
cd ~/new/nginx_source/nginx-1.10.1/
dpkg-buildpackage -bГотовые пакеты будут сохранены под ~/new/ngix_source/. Проверьте содержимое каталога:
cd ~/new/ngix_source/
ls
Установите сгенерированные пакеты:
dpkg -i *.debВажно: если возникнут ошибки зависимости, используйте apt-get -f install для их автоматического разрешения.
Тестирование
Критерии приёмки
- Команда
nginx -Vдолжна показывать, что модуль ngx_pagespeed собран в бинарник. - Конфигурация nginx проходит
nginx -tбез ошибок. - При запросе страницы видны оптимизированные ресурсы с именами, характерными для PageSpeed (например, URL-ы, содержащие
.pagespeed.).
Шаг 1 — проверка сборки
nginx -VВы должны увидеть строку конфигурации сборки с добавленным --add-module=...ngx_pagespeed....
Шаг 2 — проверка работы через curl
Перейдите в директорию конфигурации и отредактируйте виртуальный хост (default.conf):
cd /etc/nginx/conf.d/vim default.confВставьте следующий фрагмент для включения ngx_pagespeed:
pagespeed on;
# Needs to exist and be writable by nginx. Use tmpfs for best performance.
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }Сохраните и закройте файл.

Проверьте конфигурацию и перезапустите сервис:
nginx -t
systemctl restart nginxСделайте запрос к серверу для быстрой проверки:
curl -I 192.168.1.6
Если страницы отдаются, а ресурсы оптимизируются (в URL встречается .pagespeed.), значит модуль работает корректно.
Альтернативные подходы и когда сборка не нужна
- Использовать готовые пакеты от репозиториев (nginx.org, официальные PPA), если они уже содержат требуемые модули.
- Развернуть контейнер Docker с предварительно собранным nginx + pagespeed — удобно для тестирования и CI.
- Если необходима возможность динамической загрузки модулей, используйте версии nginx с поддержкой динамических модулей (в новых ветках) или сборку с директивой
--add-dynamic-module.
Когда сборка может не подойти:
- На проприетарных дистрибутивах с политикой подписанных пакетов — лучше использовать официальные репозитории.
- Если требуется частая смена модулей в продакшене — prefer динамические модули или контейнеризацию.
Практические подсказки и модели мышления
- Ментальная модель: сборка = «фиксированная сборка бинарника» — выбираете набор модулей перед компиляцией; менять их в работающем бинарнике нельзя.
- Хедж‑правило: сохраняйте копии оригинальных конфигураций и пакетов перед обновлением — это облегчает откат.
- Мини‑методология: подготовка → загрузка исходников → включение модулей → сборка → тест → деплой.
Контроль качества и роль‑ориентированные чек‑листы
Для системного администратора:
- Убедиться, что пакеты сборки и зависимости установлены.
- Проверить
nginx -Vиnginx -t. - Настроить ротацию и права на /var/ngx_pagespeed_cache.
Для разработчика:
- Проверить, что страницы корректно оптимизируются и не ломается JS/CSS при минификации.
- Тестировать на стейдже перед продом.
Для инженера безопасности:
- Убедиться, что кэш pagespeed защищён правами доступа и расположен не в публичной части сайта.
- Проверить заголовки безопасности и отсутствие утечек метаданных.
Факты и версии
- Целевая платформа: Ubuntu Server 16.04 — 64‑бит
- Примерная версия nginx в данном руководстве: 1.10.1
- Примерная версия ngx_pagespeed: 1.11.33 (psol ${ngx_version})
Безопасность и эксплуатация
- Размещайте FileCachePath на разделе с достаточным местом и правильными правами:
chown -R www-data:www-data /var/ngx_pagespeed_cache. - Рассмотрите tmpfs для кэша на высокопроизводительных системах — это уменьшит I/O, но потребует контроля памяти.
- Мониторьте размер кэша и метрики I/O.
Краткий глоссарий
- Nginx — веб‑сервер и обратный прокси.
- ngx_pagespeed — модуль Google для автоматической оптимизации фронтенд‑ресурсов.
- psol — бинарные зависимости PageSpeed, требуемые для обработки изображений.
Итоги
Сборка Nginx с модулем PageSpeed — рабочий способ получить сервер с автоматической оптимизацией контента в окружении, где нет готовых пакетов. Подойдёт для контролируемых окружений, staging и production при внимательной регулярной поддержке и мониторинге.
Ключевые шаги: подготовка окружения → загрузка исходников → включение модуля в debian/rules → сборка dpkg-buildpackage → тестирование и перезапуск.
Примечание: при обновлении Nginx повторите процесс сборки, чтобы не потерять включённый модуль.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента