Установка модуля ngx_pagespeed на Debian 8

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: , ,

Добавить комментарий