Установка Nginx на Ubuntu 14.04 с модулем ngx_pagespeed

Привет, публикую короткий, step-by-step практический мануал по установке и настройке веб-сервера Nginx на Ubuntu 14.04 / 16.04 с модулем ngx_pagespeed. Основная проблема тут заключается в том, что веб-сервер Nginx до недавних пор не имел возможности загрузки динамических модулей, а модуль ngx_pagespeed не включен в поставку по умолчанию.

Начиная с версии Nginx 1.9.11 подгрузка динамических модулей разрешена, но вопрос, у кого в production есть версия Nginx 1.9.11. Для тестов существует простое и элегантное решение, скомпилировать последнюю стабильную версию Nginx 1.9.11 где-нибудь в сторонке, запустить сервер с теми же настройками, что у меня (к примеру) есть сейчас и готово, можно тестировать.

Готовим Ubuntu 16.04

Обновляем репозитории и ставим необходимые для компиляции пакеты:

apt-get update
apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
apt-get update
apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip

Добавляем пользователя в систему:

useradd -s /sbin/nologin nginx
useradd -s /sbin/nologin nginx

Компилировать я буду в директории /root/usr/local/nginx, а значит надо ее создать:

mkdir -p /root/usr/local/nginx
mkdir -p /root/usr/local/var/log
mkdir -p /root/usr/local/nginx
mkdir -p /root/usr/local/var/log

Готовим модуль ngx_pagespeed для Nginx

Последнюю версию можно найти на Github.
Необходимо скачать исходники и распаковать.

cd
NPS_VERSION=1.11.33.2
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip -O release-${NPS_VERSION}-beta.zip
unzip release-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz  # extracts to psol/
cd
NPS_VERSION=1.11.33.2
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip -O release-${NPS_VERSION}-beta.zip
unzip release-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz  # extracts to psol/

Готовим веб-сервер Nginx

Необходимо скачать исходники и распаковать.

cd
NGINX_VERSION=1.10.1
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}/
cd
NGINX_VERSION=1.10.1
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}/

Компилируем веб-сервер Nginx

Я включил в компиляцию необходимые мне модули и указал в качестве рабочей папки путь /root/usr/local/nginx, модули которые я использовал при компиляции:

    – http_ssl_module
    – http_realip_module
    – http_stub_status_module
    – http_geoip_module
    – ngx_pagespeed

Итак, собираем:

./configure --user=nginx --group=nginx --prefix=/root/usr/local/nginx --sbin-path=/root/usr/local/nginx --conf-path=/root/usr/local/nginx/nginx.conf --pid-path=/root/usr/local/nginx/nginx.pid --error-log-path=/root/usr/local/var/log/error.log --http-log-path=/root/usr/local/var/log/access.log --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_geoip_module --add-module=$HOME/ngx_pagespeed-release-${NPS_VERSION}-beta ${PS_NGX_EXTRA_FLAGS}
./configure --user=nginx --group=nginx --prefix=/root/usr/local/nginx --sbin-path=/root/usr/local/nginx --conf-path=/root/usr/local/nginx/nginx.conf --pid-path=/root/usr/local/nginx/nginx.pid --error-log-path=/root/usr/local/var/log/error.log --http-log-path=/root/usr/local/var/log/access.log --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_geoip_module --add-module=$HOME/ngx_pagespeed-release-${NPS_VERSION}-beta ${PS_NGX_EXTRA_FLAGS}

Компилируем:

make 
sudo make install 
make 
sudo make install 

Запускаем веб-сервер Nginx

cd /root/usr/local/nginx
./nginx -c /etc/nginx/nginx.conf
cd /root/usr/local/nginx
./nginx -c /etc/nginx/nginx.conf

Настраиваем модуль ngx_pagespeed

Теперь когда все готово, необходимо включить модуль ngx_pagespeed в файле конфигурации, там будет путь для хранения кэш файлов, я запихнул это все в tmpfs для лучшей производительности:

mkdir /var/ngx_pagespeed_cache
chown nginx:nginx /var/ngx_pagespeed_cache
mount -t tmpfs -o size=512m tmpfs /var/ngx_pagespeed_cache
mkdir /var/ngx_pagespeed_cache
chown nginx:nginx /var/ngx_pagespeed_cache
mount -t tmpfs -o size=512m tmpfs /var/ngx_pagespeed_cache

Открываем файл конфигурации nginx.conf и туда добавляем:

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

Открываем файл виртуального хоста и туда добавляем:

location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
  add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
  add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }

Перезапускаем веб-сервер Nginx:

kill -HUP $(/root/usr/local/nginx/nginx.pid)
kill -HUP $(/root/usr/local/nginx/nginx.pid)

Можно еще вот так:

./ngins -s reload
./ngins -s reload

Ссылки на вещи которые могут вам понадобится:

https://nginx.org/download/nginx-1.11.3.tar.gz
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
http://zlib.net/zlib-1.2.8.tar.gz
https://www.openssl.org/source/openssl-1.0.1t.tar.gz
https://codeload.github.com/pagespeed/ngx_pagespeed/zip/master
https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz
http://zlib.net/zlib-1.2.8.tar.gz

Теперь у вас будет отдельно скомпилированная версия веб-сервера, которую вы можете запустить с вашим стандартным файлом конфигурации и при необходимости удалить, самое главное тут, что система не засоряется, и при необходимости вы можете продолжить использовать вашу старую версию Nginx установленную из стандартных репозиториев Ubuntu.

Если же вы захотите использовать скомпилированную версию, то просто поправьте init скрипт и вы сможете запускать веб-сервер привычным вам способом.