Установка модуля ngx_pagespeed на Debian 8
Debian | Комментировать запись
ngx_pagespeed (или просто pagespeed) – это модуль Nginx, предназначенный для автоматической оптимизации работы сайта путём сокращения времени загрузки сайта в браузере. Дополнительную информацию о модуле можно найти на официальном сайте.
Данное руководство поможет установить и настроить pagespeed для Nginx.
Важно! Nginx не поддерживает динамической загрузки модулей, которая доступна на других веб-серверах (например, Apache). Поскольку Nginx не поддерживает этой функции, чтобы добавить модуль, нужно собрать этот сервер из исходного кода.
Конечно, этот метод установки имеет один недостаток – вы несете полную ответственность за его обновления. Потому прежде чем приступить к установке модуля, примите это во внимание и хорошо обдумайте необходимость использования ngx_pagespeed.
Требования
Данное руководство написано для Debian 8. На сайте можно найти аналогичные руководства для систем Ubuntu 14.04 и CentOS 7.
Для выполнения руководства потребуется:
- Сервер Debian 8.
- Не-root пользователь с доступом к sudo (о создании такого пользователя можно прочесть здесь).
1: Загрузка исходного кода и зависимостей
Сначала нужно загрузить все зависимости Nginx. Для этого запустите:
sudo apt-get build-dep nginx
Затем создайте в домашнем каталоге подкаталог для загрузки пакета Nginx.
mkdir ~/custom-nginx
Откройте новый каталог:
cd ~/custom-nginx
После этого загрузите исходный пакет Nginx при помощи команды:
sudo apt-get source nginx
Запросите контент папки ~/custom-nginx:
ls ~/custom-nginx
На экране появится ответ:
nginx-1.6.2 nginx_1.6.2-5.debian.tar.xz nginx_1.6.2-5.dsc nginx_1.6.2.orig.tar.gz
Как видите, на момент написания статьи последней доступной версией Nginx является 1.6.2. Чтобы добавить модуль ngx_pagespeed, нужно сначала открыть папку modules в каталоге nginx-1.6.2:
cd nginx-1.6.2/debian/modules
В этот каталог нужно загрузить архив ngx_pagespeed из репозитория Github.
sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
После этого нужно распаковать архив при помощи утилиты unzip. Установить эту утилиту можно при помощи команды:
sudo apt-get install unzip
Затем извлеките содержимое архива:
sudo unzip master.zip
Это создаст новый каталог ngx_pagespeed-master в каталоге ~/nginx-1.6.2/debian/modules. Для удобства переименуйте его в ngx_pagespeed:
sudo mv ngx_pagespeed-master ngx_pagespeed
Откройте этот каталог:
cd ngx_pagespeed
Загрузите в него пакет PageSpeed Optimization Libraries (psol):
sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz
Примечание: Если ссылка на архив psol не сработала, просто пропустите этот шаг. Если система обнаружит нехватку библиотек во время компиляции, она выдаст сообщение об ошибке с подробными инструкциями о том, как получить необходимый пакет.
Распакуйте архив библиотеки psol в каталог ~/custom-nginx/nginx-1.6.2/debian/modules/ngx_pagespeed:
sudo tar -xzvf 1.9.32.6.tar.gz
2: Настройка исходного кода
Теперь нужно отредактировать код Nginx и добавить в него модуль pagespeed. Для этого откройте ~/custom-nginx/nginx-1.6.2/debian/rules в текстовом редакторе:
sudo nano ~/custom-nginx/nginx-1.6.2/debian/rules
Nginx предлагает четыре сценария компиляции пакета:
- Common: общие файлы Nginx без сервера.
- Full: пакеты сервера и наиболее популярных модулей.
- Light: пакеты сервера и наиболее важные модули
- Extras: пакеты сервера и набор дополнительных модулей.
Предположим, что нужно установить light Nginx и модуль ngx_pagespeed. Добавьте в конец блока light_configure_flags следующую строку:
--add-module=$(MODULESDIR)/ngx_pagespeed
Примечание: Не забудьте добавить обратный слеш в предыдущую строку.
Полный список настроек имеет такой вид:
light_configure_flags := \
$(common_configure_flags) \
--with-http_gzip_static_module \
--without-http_browser_module \
--without-http_geo_module \
--without-http_limit_req_module \
--without-http_limit_zone_module \
--without-http_memcached_module \
--without-http_referer_module \
--without-http_scgi_module \
--without-http_split_clients_module \
--without-http_ssi_module \
--without-http_userid_module \
--without-http_uwsgi_module \
--add-module=$(MODULESDIR)/nginx-echo \
--add-module=$(MODULESDIR)/ngx_pagespeed
Примечание: Эти настройки подходят и для остальных сценариев компиляции.
Теперь нужно изменить номер версии, так как в дальнейшем это позволит закрепить пакет. Для этого откройте changelog:
sudo nano ~/custom-nginx/nginx-1.6.2/debian/changelog
Первая строка файла changelog показывает текущую версию пакета (1.6.2-5) и дистрибутив Debian (unstable). Добавьте в конец этой строки пользовательский тег (например, pagespeed) через дефис:
nginx (1.6.2-5-pagespeed) unstable; urgency=medium
3: Сборка и установка Nginx с модулем ngx_pagespeed
Теперь код Nginx отредактирован, и при сборке в установку будет добавлен модуль ngx_pagespeed. Можно приступать к компиляции кода.
Откройте каталог ~/custom-nginx/nginx-1.6.2/:
cd ~/custom-nginx/nginx-1.6.2/
Запустите следующую команду, чтобы начать компилирование Nginx:
sudo dpkg-buildpackage -b
Процесс сборки займёт не более 10 минут.
Примечание: Чтобы предотвратить сбой компиляции из-за потери соединения, используйте screen.
При корректном выполнении всех вышеприведенных инструкций процесс компиляции пройдёт без ошибок. Новые пользовательские пакеты Nginx можно найти в ~/custom-nginx/:
cd ~/custom-nginx/
Запросите список пакетов ~/custom-nginx/:
ls ~/custom-nginx/
На кране появится список, содержащий множество пакетов .deb. Необходимые вам пакеты называются nginx-common_1.6.2-5-pagespeed_all.deb (общие файлы Nginx) и nginx-light_1.6.2-5-pagespeed_amd64.deb (файлы сервера).
Примечание: Если в файл changelog вместо pagespeed был добавлен другой тег, он и будет отображаться в названиях пакетов.
Чтобы установить пользовательские пакеты Nginx и pagespeed, запустите:
sudo dpkg -i nginx-common_1.6.2-5-pagespeed_all.deb nginx-light_1.6.2-5-pagespeed_amd64.deb
4: Включение ngx_pagespeed
После установки сервера Nginx нужно включить модуль ngx_pagespeed.
Но сначала нужно создать папку, в которой модуль будет хранить кэш файлов сайта:
sudo mkdir -p /var/ngx_pagespeed_cache
Передайте права на эту папку пользователю Nginx, чтобы веб-сервер имел необходимый уровень доступа.
sudo chown -R www-data:www-data /var/ngx_pagespeed_cache
Откройте главный конфигурационный файл Nginx, nginx.conf, для редактирования:
sudo nano /etc/nginx/nginx.conf
Добавьте в блок http следующие строки и сохраните изменения:
##
# Pagespeed Settings
##
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
Примечание: Этот код можно добавить в любую точку раздела http; но в данном примере этот код будет добавлен в конец блока.
Теперь файл /etc/nginx/nginx.conf выглядит так:
...
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
##
# Pagespeed Settings
##
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
...
Также конфигурацию pagespeed нужно добавить во все существующие блоки server в каталоге /etc/nginx/sites-available. К примеру, отредактируйте /etc/nginx/sites-available/default:
sudo nano /etc/nginx/sites-available/default
Добавьте в server-блок следующее:
# 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 ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
Эти параметры настраивают pagespeed для оптимизации всех сайтов.
Перезапустите Nginx, чтобы обновить настройки:
sudo service nginx restart
5: Тестирование установки
Чтобы убедиться, что модуль ngx_pagespeed работает, запустите бинарный файл Nginx.
sudo /usr/sbin/nginx -V
Если установка прошла успешно, модуль ngx_pagespeed появится в списке среди других пользовательских аргументов:
nginx version: nginx/1.6.2
...
--add-module=/home/your_user/custom-nginx/nginx-1.6.2/debian/modules/ngx_pagespeed
Однако это ещё не значит, что модуль включен и работает на сайте. Проверить это можно при помощи инструмента curl.
Чтобы установить curl, введите:
sudo apt-get install curl
Затем запросите заголовок X-Page-Speed:
curl -I -p http://localhost| grep X-Page-Speed
Если модуль работает должным образом, на экране появится версия:
X-Page-Speed: 1.9.32.6-7321
Если команда не вернула такого вывода, убедитесь, что вы включили pagespeed согласно инструкциям предыдущего раздела.
6: Закрепление пакета Nginx
Чтобы в дальнейшем пакетный менеджер apt не заменил пользовательский пакет Nginx более новой версией, нужно зафиксировать версию.
Для начала создайте файл nginx в /etc/apt/preferences.d:
sudo nano /etc/apt/preferences.d/nginx
Затем добавьте в него следующий код:
Package: nginx-light
Pin: version 1.6.2-5-pagespeed
Pin-Priority: 1001
Сохраните файл.
Примечание: В данном файле нужно указать версию пользовательского пакета Nginx; потому указанные здесь значения nginx-light и 1.6.2-5-pagespeed могут отличаться.
Заключение
Теперь веб-сервер Nginx собран из исходного кода с пользовательским модулем pagespeed.
Эти инструкции помогут добавить и любой другой модуль Nginx. Кроме того, сам процесс установки пакета из исходного кода похож на сборку других программных пакетов. Только не забывайте о том, что поддерживать и обновлять эти пакеты вам придётся самостоятельно.
Tags: Debian 8, NGINX, ngx_pagespeed