Установка модуля ngx_pagespeed на CentOS 7
Centos | Комментировать запись
ngx_pagespeed (или просто pagespeed) – это модуль Nginx, предназначенный для автоматической оптимизации работы сайта путём сокращения времени загрузки сайта в браузере. Дополнительную информацию о модуле можно найти на официальном сайте.
Данное руководство поможет установить и настроить pagespeed для Nginx.
Важно! Nginx не поддерживает динамической загрузки модулей, которая доступна на других веб-серверах (например, Apache). Поскольку Nginx не поддерживает этой функции, чтобы добавить модуль, нужно собрать этот сервер из исходного кода.
Конечно, этот метод установки имеет один недостаток – вы несете полную ответственность за его обновления. Потому прежде чем приступить к установке модуля, примите это во внимание и хорошо обдумайте необходимость использования ngx_pagespeed.
Требования
Данное руководство написано для CentOS 7. На сайте можно найти аналогичные руководства для систем Ubuntu 14.04 и Debian 8.
Для выполнения инструкций потребуется:
- Сервер CentOS 7.
- Не-root пользователь с доступом к sudo (о создании такого пользователя можно прочесть здесь).
1: Загрузка исходного кода и зависимостей
Для начала нужно загрузить все необходимые для компиляции и тестирования программы. Для этого запустите:
sudo yum install wget curl unzip gcc-c++ pcre-devel zlib-devel
Затем создайте в домашнем каталоге папку для загрузки пакета Nginx.
mkdir ~/custom-nginx
Откройте эту папку:
cd ~/custom-nginx
После этого загрузите исходный пакет Nginx с официального сайта. На момент написания статьи последней доступной версией является 1.8.0:
sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz
Затем распакуйте полученный архив:
sudo tar zxvf nginx-1.8.0.tar.gz
Запросите контент папки ~/custom-nginx:
ls ~/custom-nginx
Команда должна вернуть:
Output of ls ~/custom-nginx
nginx-1.8.0 nginx-1.8.0.tar.gz
Чтобы добавить модуль ngx_pagespeed, нужно сначала открыть папку modules в каталоге nginx-1.8.0:
cd nginx-1.8.0/src/http/modules/
В этот каталог нужно загрузить архив ngx_pagespeed из репозитория Github.
sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
После завершения загрузки извлеките содержимое архива:
sudo unzip master.zip
Это создаст новый каталог ngx_pagespeed-master в каталоге ~/custom-nginx/nginx-1.8.0/src/http/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.4.6/debian/modules/ngx_pagespeed:
sudo tar -xzvf 1.9.32.6.tar.gz
2: Настройка и компиляция исходного кода
Теперь нужно отредактировать код Nginx и добавить в него модуль pagespeed. Откройте родительский каталог кода Nginx:
cd ~/custom-nginx/nginx-1.8.0/
Чтобы настроить код, наберите:
sudo ./configure --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/ --user=nobody --group=nobody --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
Примечание: Замените компонент your_user именем своего пользователя. Самая важная настройка – это –add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/. Именно она добавляет pagespeed в компиляцию Nginx.
Для удобства можно изменить несколько других параметров, например, расположение лог-файлов и пользователя/группу, при помощи которых запускается сервер. Для получения более подробной информации об этих настройках, пожалуйста, обратитесь к документации.
Завершив настройку, запустите компиляцию:
sudo make
Этот процесс займёт несколько минут (в зависимости от ресурсов сервера). После этого можно установить программу:
sudo make install
Пользовательская установка Nginx хранится в каталоге/usr/local/nginx. Теперь нужно создать две символьные ссылки. Одна из них – на конфигурационный файл:
sudo ln -s /usr/local/nginx/conf/ /etc/nginx
Теперь конфигурационные файлы будут доступны в каталоге /etc/nginx/.
Вторая символьная ссылка – на главный бинарный файл в каталоге /usr/sbin/, чтобы его легче было найти и добавить в сценарий запуска. Для этого выполните команду:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
3: Создание сценария запуска
Предыдущий процесс установки выполняет несколько рутинных задач (создание необходимой учётной записи пользователя и группы, при помощи которых будет работать Nginx). Однако загрузочный скрипт придется создать вручную. К счастью, для Nginx на CentOS 7 доступны уже готовые скрипты на сайте проекта.
Для начала создайте новый файл в каталоге /etc/init.d/:
sudo nano /etc/init.d/nginx
Затем перейдите по этой ссылке, скопируйте скрипт и вставьте его в файл.
Сделайте скрипт исполняемым, запустив команду:
sudo chmod +x /etc/init.d/nginx
После этого можно запустить Nginx:
sudo service nginx start
Чтобы Nginx автоматически запускался и останавливался вместе с сервером, добавьте в уровни запуска следующую команду:
sudo chkconfig nginx on
4: Включение модуля pagespeed
После установки сервера Nginx нужно включить ngx_pagespeed.
Но сначала нужно создать папку, в которой модуль сможет хранить кэш файлов сайта:
sudo mkdir -p /var/ngx_pagespeed_cache
Передайте права на эту папку пользователю Nginx, чтобы веб-сервер имел необходимый уровень доступа.
sudo chown -R nobody:nobody /var/ngx_pagespeed_cache
Откройте главный конфигурационный файл Nginx, nginx.conf, для редактирования:
sudo nano /etc/nginx/nginx.conf
Добавьте в блок server следующие строки и сохраните изменения:
##
# Pagespeed main settings
pagespeed on;
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 ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
Примечание: Этот код можно добавить в любую точку данного раздела; но в данном примере этот код будет добавлен в конец блока.
Теперь файл /etc/nginx/nginx.conf выглядит так:
...
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
##
# Pagespeed main settings
pagespeed on;
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 ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
location / {
root html;
index index.html index.htm;
}
...
Примечание: Конфигурацию pagespeed нужно добавить во все существующие блоки server.
Перезапустите Nginx:
sudo service nginx restart
5: Тестирование установки
Чтобы убедиться, что модуль ngx_pagespeed работает, запустите бинарный файл Nginx.
sudo /usr/sbin/nginx -V
Если установка прошла успешно, модуль ngx_pagespeed появится в списке среди других пользовательских аргументов:
nginx version: nginx/1.8.0
...
configure arguments: --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/
...
Однако это ещё не значит, что модуль включен и работает на сайте. Проверить это можно при помощи инструмента curl. Запросите заголовок X-Page-Speed:
curl -I -p http://localhost| grep X-Page-Speed
Если модуль работает должным образом, на экране появится версия:
X-Page-Speed: 1.9.32.6-7321
Если команда не вернула такого вывода, убедитесь, что вы включили pagespeed согласно инструкциям предыдущего раздела.
Заключение
Теперь ве-сервер Nginx собран из исходного кода с пользовательским модулем pagespeed.
Эти инструкции помогут добавить и любой другой модуль Nginx. Кроме того, сам процесс установки пакета из исходного кода похож на сборку других программных пакетов. Только не забывайте о том, что поддерживать и обновлять эти пакеты вам придётся самостоятельно.
Tags: CentOS 7, NGINX, ngx_pagespeed