Сборка nginx с ngx_pagespeed на Debian Jessie
Краткая пошаговая инструкция по сборке nginx с модулем ngx_pagespeed на Debian Jessie (Debian 8). Собираем собственные .deb-пакеты, подключаем ngx_pagespeed, настраиваем кеш и фильтры, проверяем заголовки ответа. Заменяйте номера версий в примерах на актуальные.
Авторы: Falko Timme, F4RR3LL | Sven
О чём эта инструкция
Это руководство объясняет, как собрать nginx с последней доступной версией модуля ngx_pagespeed на Debian Jessie. Модуль PageSpeed применяет лучшие практики ускорения веба к страницам и связанным ресурсам (CSS, JavaScript, изображения), что снижает время загрузки сайта.
1 Сборка nginx с модулем PageSpeed
nginx не поддерживает динамическую загрузку модулей, поэтому нужно пересобрать пакет с поддержкой PageSpeed. В примере мы создаём .deb-пакет, чтобы можно было заменить существующую установку nginx или установить пакет на других системах.
Создайте рабочую директорию:
cd /usr/src
mkdir nginx-pagespeed && cd nginx-pagespeedУбедитесь, что в /etc/apt/sources.list есть строки deb и deb-src для Jessie (Debian 8):
nano /etc/apt/sources.list[...]
deb http://ftp.de.debian.org/debian jessie main contrib non-free
deb-src http://ftp.de.debian.org/debian jessie main contrib non-free
[...]Обновите список пакетов и установите зависимости для сборки:
apt-get updateapt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl libcurl4-openssl-dev libossp-uuid-devСкачайте исходники nginx и зависимости для сборки:
apt-get source nginxapt-get build-dep nginxПроверьте версию загруженных исходников:
ls -lПример вывода (у вас могут быть другие версии):
root@nginx:/usr/src/nginx-pagespeed# ls -l
insgesamt 1388
drwxr-xr-x 10 root root 4096 Apr 29 22:16 nginx-1.6.2
-rw-r–r– 1 root root 604568 Dez 1 12:51 nginx_1.6.2-5.debian.tar.xz
-rw-r–r– 1 root root 2827 Dez 1 12:51 nginx_1.6.2-5.dsc
-rw-r–r– 1 root root 804164 Sep 17 2014 nginx_1.6.2.orig.tar.gzВ примере версия nginx — 1.6.2. Перейдите в директорию debian/modules в исходниках nginx:
cd /usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/Скачайте исходники PageSpeed (проверьте актуальную версию на https://github.com/pagespeed/ngx_pagespeed/releases). В примере используется release-1.9.32.3-beta — замените номера на актуальные при необходимости:
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.9.32.3-beta.zip
unzip release-1.9.32.3-beta.zip
mv ngx_pagespeed-release-1.9.32.3-beta/ ngx_pagespeed
cd ngx_pagespeed/
wget https://dl.google.com/dl/page-speed/psol/1.9.32.3.tar.gz
tar -xzvf 1.9.32.3.tar.gzОткройте файл debian/rules для правки:
nano /usr/src/nginx-pagespeed/nginx-1.6.2/debian/rulesВ этом файле найдите три секции configure_flags и добавьте строку
--add-module=$(MODULESDIR)/ngx_pagespeed \в нужных местах: в light_configure_flags (после –without-http_uwsgi_module), в full_configure_flags (после –with-mail_ssl_module) и в extras_configure_flags (после –add-module=$(MODULESDIR)/nginx-development-kit). Результат должен соответствовать примеру в исходном руководстве. Обратите внимание: используйте табуляцию перед строками, как в оригинале.
Пример ключевой части файла debian/rules оставлено без изменений (см. исходник). После правок соберите пакеты:
cd /usr/src/nginx-pagespeed/nginx-1.6.2/ && dpkg-buildpackage -bПосле успешной сборки посмотрите сгенерированные пакеты:
cd /usr/src/nginx-pagespeed
ls -lПример ожидаемых файлов (имена и размеры зависят от версии):
root@nginx:/usr/src/nginx-pagespeed# ls -l
insgesamt 99720
drwxr-xr-x 10 root root 4096 Apr 29 22:16 nginx-1.6.2
-rw-r–r– 1 root root 72086 Apr 29 23:06 nginx_1.6.2-5_all.deb
-rw-r–r– 1 root root 3961 Apr 29 23:08 nginx_1.6.2-5_amd64.changes
... (и другие пакеты nginx-full, nginx-extras и т.д.)Установите nginx с поддержкой PageSpeed (замените имена пакетов на ваши):
dpkg --install nginx-common_1.6.2-5_all.deb nginx_1.6.2-5_all.deb nginx-full_1.6.2-5_amd64.debПерезапустите nginx:
service nginx restartПроверьте, что модуль PageSpeed вошёл в конфигурацию:
nginx -VВ выводе вы должны увидеть упоминание –add-module=…/ngx_pagespeed.
2 Настройка PageSpeed
Чтобы включить PageSpeed, откройте /etc/nginx/nginx.conf:
nano /etc/nginx/nginx.confДобавьте до определения виртуальных хостов:
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;Создайте директорию кеша и установите права:
mkdir /var/ngx_pagespeed_cache
chown -R www-data:www-data /var/ngx_pagespeed_cacheПерезагрузите конфигурацию nginx:
service nginx reloadПроверьте наличие заголовка X-Page-Speed в ответах сервера:
curl -I -p http://localhost|grep X-Page-SpeedОжидаемый пример вывода (номер версии может отличаться):
root@nginx:/usr/src/nginx-pagespeed# curl -I -p http://localhost|grep X-Page-Speed
X-Page-Speed: 1.9.32.3-4448PageSpeed можно настраивать глобально или в каждом vhost. Пример конфигурации в /etc/nginx/sites-available/example.com.vhost:
nano /etc/nginx/sites-available/example.com.vhostserver {
[...]
# даём PageSpeed быстрый memcached
pagespeed MemcachedThreads 1;
pagespeed MemcachedServers "localhost:11211";
# настройки фильтров
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters collapse_whitespace,remove_comments;
# Убедиться, что запросы к оптимизированным ресурсам идут к обработчику pagespeed
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/ngx_pagespeed_static/" {
}
location ~ "^/ngx_pagespeed_beacon$" {
}
location /ngx_pagespeed_statistics {
allow 127.0.0.1;
deny all;
}
location /ngx_pagespeed_global_statistics {
allow 127.0.0.1;
deny all;
}
location /ngx_pagespeed_message {
allow 127.0.0.1;
deny all;
}
location /pagespeed_console {
allow 127.0.0.1;
deny all;
}
[...]
}Важно: ключевая строка pagespeed EnableFilters определяет, какие фильтры будут применяться. Список всех фильтров см. на http://ngxpagespeed.com/ngx_pagespeed_example/
Не забудьте перезагрузить nginx после правок:
service nginx reloadПросмотрите заголовки ответа или исходный HTML, чтобы убедиться, что фильтры PageSpeed применяются.
3 Полезные ссылки
- Google Developers’ Blog: http://googledevelopers.blogspot.nl/2013/04/speed-up-your-sites-with-pagespeed-for.html
- ngx_pagespeed: https://developers.google.com/speed/pagespeed/ngx
- Исходники и сборка PageSpeed: https://github.com/pagespeed/ngx_pagespeed
- Примеры фильтров ngx_pagespeed: http://ngxpagespeed.com/ngx_pagespeed_example/
Когда это может не сработать
- Если вы используете очень старые или нестандартные пакеты nginx из сторонних репозиториев — может понадобиться адаптация debian/rules.
- Если версии psol (binary dependency для ngx_pagespeed) и ngx_pagespeed не совпадают — сборка или runtime могут ломаться.
- На окружениях с ограниченными правами сборка .deb может быть невозможна; в таком случае рассмотрите сборку nginx из чистого исходника или использование контейнера.
Альтернативные подходы
- Установить nginx с PageSpeed из сторонних готовых пакетов (если доверяете репозиторию).
- Использовать сторонние CDN/оптимизаторы (например, Cloudflare, Fastly), которые применяют похожие оптимизации без модификации сервера.
- Применять ручную оптимизацию ресурсов (minify, спрайты, lazy-loading) в процессе CI/CD.
Пошаговый чеклист (мини-методология)
- Подготовить систему: обновить apt и установить пакеты для сборки.
- Скачать исходники nginx и зависимости сборки.
- Скачать ngx_pagespeed и соответствующий psol-архив.
- Внести правки в debian/rules (добавить –add-module=$(MODULESDIR)/ngx_pagespeed).
- Собрать пакеты: dpkg-buildpackage -b.
- Установить .deb-пакеты и перезагрузить nginx.
- Включить pagespeed в /etc/nginx/nginx.conf и создать кеш-директорию.
- Настроить фильтры в vhost и проверить заголовки/HTML.
Критерии приёмки
- nginx -V показывает –add-module=…/ngx_pagespeed.
- Заголовок X-Page-Speed присутствует в ответах сервера.
- Оптимизации (например, удаление комментариев или сжатие) видны в HTML или ресурсах.
Безопасность и приватность
- PageSpeed кеширует ресурсы в указанной вами папке; убедитесь, что права доступа настроены корректно (chown www-data:www-data).
- Если ваши страницы содержат персональные данные, проверьте, что PageSpeed не кэширует приватный контент в общем кеше.
- Поставьте ограничения доступа к статистике pagespeed (пример показан в конфигурации — только 127.0.0.1).
Краткий глоссарий
- ngx_pagespeed — модуль от PageSpeed для nginx, автоматически оптимизирующий ресурсы.
- psol — предкомпилированная бинарная зависимость для ngx_pagespeed (PageSpeed Optimization Library).
- vhost — виртуальный хост (виртуальная конфигурация сайта в nginx).
Частые проблемы и их решения
- Ошибка сборки: проверьте, совпадают ли версии ngx_pagespeed и psol; скачайте соответствующую пару.
- Нет заголовка X-Page-Speed: убедитесь, что pagespeed on; указан до include vhosts и что кеш-директория существет и доступна nginx.
- Неправильные права на кеш: выполните chown -R www-data:www-data /var/ngx_pagespeed_cache.
FAQ
Q: Нужно ли менять версии в примерах?
A: Да. Всегда заменяйте номера версии (ngx_pagespeed, psol, nginx) на актуальные для вашей сборки.
Q: Можно ли подключить PageSpeed как динамический модуль?
A: Для этой версии nginx динамическая загрузка модулей не используется — требуется пересборка с модулем.
Q: Как быстро откатиться, если новая сборка ломает сайт?
A: Установите обратно предыдущие .deb-пакеты из резервной копии или переустановите пакет nginx из официального репозитория.
Краткое резюме
- Соберите nginx как .deb с добавленным модулем ngx_pagespeed.
- Включите pagespeed в конфиге, создайте кеш-директорию и задайте права.
- Настройте фильтры в vhost и проверьте заголовки и HTML.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента