Menu

Подключаем модуль PageSpeed к nginx

В этой статье рассмотрим, как собрать nginx с последней версией модуля nginx_pagespeed на Debian Jessie. Модуль PageSpeed применяется для повышения производительности страниц и связанных с ними объектами (CSS, JavaScript, изображения) и поэтому ускоряет веб-сайт и уменьшает время загрузки.

 

1 Сборка nginx с модулем PageSpeed

Увы, nginx не является модульной системой на данный момент и не поддерживает динамической загрузки модулей, поэтому нам придётся его пересобрать с поддержкой PageSpeed. Создадим nginx как пакет .deb, для того, чтобы заменить текущую установку nginx (или легко установить его на другие системы).

Создадим директорию для nginx:

cd /usr/src
mkdir nginx-pagespeed && cd nginx-pagespeed

Необходимо убедится в наличии строк deb и deb-src для Jessie в /etc/apt/sources.list:

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 update
apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl libcurl4-openssl-dev libossp-uuid-dev

Загрузим источники nginx и построим зависимости:

apt-get source nginx
apt-get build-dep nginx

Проверим версию 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 (проверьте последнюю версию, не забудьте заменить её во всех командах, если вышла новая):

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

В результате должно получиться следующее:

#!/usr/bin/make -f
export DH_VERBOSE=1
debian_cflags:=$(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
debian_ldflags:=$(shell dpkg-buildflags --get LDFLAGS)
# export necessary perl hardenging flags
# see: src/http/modules/perl/Makefile.PL
DEBIAN_NGINX_PERL_LDFLAGS:= $(debian_ldflags)
export DEBIAN_NGINX_PERL_LDFLAGS
FLAVOURS := full light extras
MODULESDIR = $(CURDIR)/debian/modules
BASEDIR = $(CURDIR)
$(foreach flavour,$(FLAVOURS),$(eval BUILDDIR_$(flavour) =$(CURDIR)/debian/build-$(flavour)))
DEB_BUILD_ARCH ?=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
ifeq ($(DEB_BUILD_ARCH),sparc)
debian_cflags += -m32 -mcpu=ultrasparc
endif
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
NUMJOBS = $(patsubst parallel=%,%,$(filter
parallel=%,$(DEB_BUILD_OPTIONS)))
MAKEFLAGS += -j$(NUMJOBS)
endif
# configure flags
common_configure_flags := \
--with-cc-opt="$(debian_cflags)" \
--with-ld-opt="$(debian_ldflags)" \
--prefix=/usr/share/nginx \
--conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--lock-path=/var/lock/nginx.lock \
--pid-path=/run/nginx.pid \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-debug \
--with-pcre-jit \
--with-ipv6 \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module
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)/ngx_pagespeed \
--add-module=$(MODULESDIR)/nginx-echo
full_configure_flags := \
$(common_configure_flags) \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_spdy_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-mail \
--with-mail_ssl_module \
--add-module=$(MODULESDIR)/ngx_pagespeed \
--add-module=$(MODULESDIR)/nginx-auth-pam \
--add-module=$(MODULESDIR)/nginx-dav-ext-module \
--add-module=$(MODULESDIR)/nginx-echo \
--add-module=$(MODULESDIR)/nginx-upstream-fair \
--add-
module=$(MODULESDIR)/ngx_http_substitutions_filter_module
extras_configure_flags := \
$(common_configure_flags) \
--with-http_addition_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_mp4_module \
--with-http_perl_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_spdy_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-mail \
--with-mail_ssl_module \
--add-module=$(MODULESDIR)/headers-more-nginx-module\
--add-module=$(MODULESDIR)/nginx-auth-pam \
--add-module=$(MODULESDIR)/nginx-cache-purge \
--add-module=$(MODULESDIR)/nginx-dav-ext-module \
--add-module=$(MODULESDIR)/nginx-development-kit \
--add-module=$(MODULESDIR)/ngx_pagespeed \
--add-module=$(MODULESDIR)/ngx-fancyindex \
--add-module=$(MODULESDIR)/nginx-http-push \
--add-module=$(MODULESDIR)/nginx-lua \
--add-module=$(MODULESDIR)/nginx-upload-progress \
--add-module=$(MODULESDIR)/nginx-upstream-fair \
--add-
module=$(MODULESDIR)/ngx_http_substitutions_filter_module
%:
dh $@ --with systemd
override_dh_auto_configure: $(foreach
flavour,$(FLAVOURS),config.arch.$(flavour))
override_dh_auto_build: $(foreach
flavour,$(FLAVOURS),build.arch.$(flavour))
override_dh_strip: $(foreach
flavour,$(FLAVOURS),strip.arch.$(flavour))
override_dh_clean: $(foreach flavour,$(FLAVOURS),clean.$(flavour))
dh_clean
override_dh_installinit:
dh_installinit --no-restart-on-upgrade --no-start --name=nginx
override_dh_systemd_enable:
dh_systemd_enable --name=nginx
override_dh_installlogrotate:
dh_installlogrotate --package nginx-common --name=nginx
build.arch.%:
$(MAKE) -C $(BUILDDIR_$*) build
strip.arch.%:
dh_strip --package=nginx-$(*) --dbg-package=nginx-$(*)-dbg
config.arch.%:
dh_testdir
mkdir -p $(BUILDDIR_$*)
cp -Pa $(CURDIR)/auto $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/conf $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/configure $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/contrib $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/src $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/man $(BUILDDIR_$*)/
cd $(BUILDDIR_$*) && ./configure $($*_configure_flags)
clean.%:
rm -rf $(BUILDDIR_$*)

Затем выполним:

–cd /usr/src/nginx-pagespeed/nginx-1.6.2/ && dpkg-buildpackage -b

для создания нового пакета nginx .deb. Затем просмотрим созданные пакеты:

–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
-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
-rw-r–r– 1 root root 86540 Apr 29 23:06 nginx-common_1.6.2-5_all.deb
-rw-r–r– 1 root root 83716 Apr 29 23:06 nginx-doc_1.6.2-5_all.deb
-rw-r–r– 1 root root 3403690 Apr 29 23:08 nginx-extras_1.6.2-5_amd64.deb
-rw-r–r– 1 root root 31745456 Apr 29 23:08 nginx-extras-dbg_1.6.2-5_amd64.deb
-rw-r–r– 1 root root 3232788 Apr 29 23:07 nginx-full_1.6.2-5_amd64.deb
-rw-r–r– 1 root root 29932616 Apr 29 23:07 nginx-full-dbg_1.6.2-5_amd64.deb
-rw-r–r– 1 root root 3136400 Apr 29 23:07 nginx-light_1.6.2-5_amd64.deb
-rw-r–r– 1 root root 28975322 Apr 29 23:08 nginx-light-dbg_1.6.2-5_amd64.deb

Теперь установим 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

Выходными данными должен быть модуль ngx_pagespeed:

–root@nginx:/usr/src/nginx-pagespeed# nginx -V
nginx version: nginx/1.6.2
TLS SNI support enabled
configure arguments: –with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' –with-ld-opt=-Wl,-z,relro –prefix=/usr/share/nginx –conf-path=/etc/nginx/nginx.conf –http-log-path=/var/log/nginx/access.log –error-log-path=/var/log/nginx/error.log –lock-path=/var/lock/nginx.lock –pid-path=/run/nginx.pid –http-client-body-temp-path=/var/lib/nginx/body –http-fastcgi-temp-path=/var/lib/nginx/fastcgi –http-proxy-temp-path=/var/lib/nginx/proxy –http-scgi-temp-path=/var/lib/nginx/scgi –http-uwsgi-temp-path=/var/lib/nginx/uwsgi –with-debug –with-pcre-jit –with-ipv6 –with-http_ssl_module –with-http_stub_status_module –with-http_realip_module –with-http_auth_request_module –with-http_addition_module –with-http_dav_module –with-http_geoip_module –with-http_gzip_static_module –with-http_image_filter_module –with-http_spdy_module –with-http_sub_module –with-http_xslt_module –with-mail –with-mail_ssl_module –add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/ngx_pagespeed –add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/nginx-auth-pam –add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/nginx-dav-ext-module –add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/nginx-echo –add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/nginx-upstream-fair –add-module=/usr/src/nginx-pagespeed/nginx-1.6.2/debian/modules/ngx_http_substitutions_filter_module

2 Настройка PageSpeed

Для включения PageSpeed, откроем /etc/nginx/nginx.conf...

–nano /etc/nginx/nginx.conf

... и добавим строки pagespeed on; и pagespeed FileCachePath в /var/ngx_pagespeed_cache; перед каждым vhost:

–[...]
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
[...]

Создадим директорию кэша и перезапустим nginx:

–mkdir /var/ngx_pagespeed_cache
chown -R www-data:www-data /var/ngx_pagespeed_cache
–service nginx reload

Загрузим страницу и проверим, упоминается ли PageSpeed в выходных данных

–curl -I -p http://localhost|grep X-Page-Speed
–root@nginx:/usr/src/nginx-pagespeed# curl -I -p http://localhost|grep X-Page-Speed
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
X-Page-Speed: 1.9.32.3-4448

Теперь PageSpeed настраивается индивидуально или для каждого виртуального хоста, например:

–nano /etc/nginx/sites-available/example.com.vhost
–server {
[...]
# let's speed up PageSpeed by storing it in the ultra fast memcached
pagespeed MemcachedThreads 1;
pagespeed MemcachedServers "localhost:11211";
# Filter settings
pagespeed RewriteLevel CoreFilters;
pagespeed EnableFilters collapse_whitespace,remove_comments;
# 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 /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, которая сообщает PageSpeed, какие фильтры применять. Большое количество фильтров можно посмотреть по ссылке:

http://ngxpagespeed.com/ngx_pagespeed_example/

Перезапустим nginx:

service nginx reload

Теперь при открытии страницы обратите внимание на заголовки (например, с помощью дополнения Live HTTP для FireFox), Вы увидите строку x-page-speed. Также можно просматривать источники HTML страниц, для проверки работы фильтров PageSpeed.

Авторизуйтесь, чтобы получить возможность оставлять комментарии
Go to top