Установка и настройка модуля PageSpeed

Thank you for reading this post, don't forget to subscribe!

Дан­ный модуль пред­на­зна­чен для опти­ми­за­ции отве­та от веб-сер­ве­ра. Его мож­но уста­но­вить для Apache и NGINX.

Apache

Модуль для apache назы­ва­ет­ся mod_pagespeed и может рас­про­стра­нять­ся как пакет.

Установка

Уста­нов­ка моду­ля немно­го раз­ли­ча­ет­ся для раз­лич­ных систем. Рас­смот­рим 2 варианта.

CentOS

Уста­нав­ли­ва­ем паке­ты at и wget:

yum install at wget

Затем необ­хо­ди­мо ска­чать уста­но­воч­ный пакет:

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm

* в дан­ном при­ме­ре мы загру­зим пакет для 64-бит­ной систе­мы. Для 32-х нуж­но исполь­зо­вать ссыл­ку https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.rpm.

После мож­но ста­вить сам модуль:

rpm -Uvh mod-pagespeed-*.rpm

Пере­за­пус­ка­ем Apache:

systemctl restart httpd

Ubuntu

Загру­жа­ем уста­но­воч­ный пакет:

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb

* мы загру­зим 64-х бит­ный пакет. Если у нас исполь­зу­ет­ся систе­ма на 32-бит, то ска­чи­ва­ем по ссыл­ке https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb.

Уста­нав­ли­ва­ем ска­чан­ный пакет командой:

dpkg -i mod-pagespeed-*.deb

После уста­нов­ки моду­ля, необ­хо­ди­мо пере­за­гру­зить apache:

systemctl restart apache2

Настройка

После уста­нов­ки моду­ля и пере­за­пус­ка сер­ви­са веб-сер­ве­ра наш сайт нач­нет исполь­зо­вать сред­ства опти­ми­за­ции. Но при жела­нии, мы можем вне­сти необ­хо­ди­мые настройки.

а) если исполь­зу­ем CentOS:

vi /etc/httpd/conf.d/pagespeed.conf

б) если исполь­зу­ем Ubuntu:

vi /etc/apache2/mods-enabled/pagespeed.conf

Дан­ный файл хоро­шо доку­мен­ти­ро­ван ком­мен­та­ри­я­ми. При­ве­дем неко­то­рые при­ме­ры для настроек.

1. Для отклю­че­ния моду­ля находим:

ModPagespeed on

и меня­ем на:

ModPagespeed off

2. Для ука­за­ния кон­крет­но­го ката­ло­га хра­не­ния кэша меня­ем опцию для:

ModPagespeedFileCachePath         "/var/cache/mod_pagespeed/"

3. Путь хра­не­ния логов:

ModPagespeedLogDir       "/var/log/pagespeed"

Для при­ме­не­ния настро­ек не забы­ва­ем пере­за­пу­стить apache:

systemctl restart {apache2,httpd}

* дан­ная коман­да отра­бо­та­ет как на CentOS, так и Ubuntu.

Доступ к веб-интерфесу

Веб-интер­фейс моду­ля поз­во­ля­ет уви­деть ста­ти­сти­ку его рабо­ты, а так­же полу­чить све­де­ния о теку­щих настрой­ках. По умол­ча­нию, доступ к нему раз­ре­шен толь­ко с локаль­но­го сер­ве­ра. Для того, что­бы раз­ре­шить под­клю­че­ние с опре­де­лен­ной сети откры­ва­ем файл:

vi /etc/httpd/conf.d/pagespeed.conf

Нахо­дим настройку:

<Location /pagespeed_admin>
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
SetHandler pagespeed_admin
</Location>

И добав­ля­ем в нее доступ (Allow from …) — в ито­ге мы полу­чим, при­мер­но, следующее:

<Location /pagespeed_admin>
Order allow,deny
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168.1.5
Allow from 192.168.0.0/24
SetHandler pagespeed_admin
</Location>

* в дан­ном при­ме­ре мы доба­ви­ли раз­ре­ше­ние исполь­зо­вать веб-интер­фейс для узла 192.168.1.5 и всей под­се­ти 192.168.0.0/24.

Пере­за­пус­ка­ем сервис:

systemctl restart {apache2,httpd}

Откры­ва­ем веб-интер­фейс по адре­су http://<IP-адрес сервера>/pagespeed_admin — мы долж­ны уви­деть стра­ни­цу Pagespeed Admin.

NGINX

Для NGINX модуль назы­ва­ет­ся ngx_pagespeed. Для его уста­нов­ки нам нуж­но будет пере­со­брать веб-сер­вер nginx.

Если наш сер­вер явля­ет­ся бое­вым, то сто­ит сна­ча­ла выпол­нить дан­ные настрой­ки в тесто­вой сре­де. После пере­с­бор­ки nginx, сай­ты могут пере­стать рабо­тать корректно.

Подготовка к сборке

Нам необ­хо­ди­мо уста­но­вить паке­ты, необ­хо­ди­мые для сбор­ки. Уста­нав­ли­ва­ем их.

а) для CentOS

yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel libaio-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed

б) для Ubuntu

apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev libssl-dev openssl libxml2-dev libxslt1-dev libgd-dev libgeoip-dev

После уста­нов­ки паке­тов, необ­хо­ди­мо загру­зить исход­ни­ки. Для нача­ла перей­дем в каталог:

cd /usr/local/src

* в него мы загру­зим все исходники.

После пере­хо­дим на стра­ни­цу загруз­ки nginx и копи­ру­ем ссыл­ку на послед­нюю ста­биль­ную вер­сию веб-сервера:

* при необ­хо­ди­мо­сти уста­но­вить дру­гую вер­сию nginx, копи­ру­ем ссыл­ку на нее. Если в вашей ситу­а­ции исполь­зу­ет­ся дей­ству­ю­щий веб-сер­вер, для под­держ­ки мак­си­маль­ной сов­ме­сти­мо­сти, луч­ше загру­жать ту же вер­сию, кото­рая уста­нов­ле­на на сервере.

Теперь загру­жа­ем пакет по ско­пи­ро­ван­ной ссылке:

wget https://nginx.org/download/nginx-1.18.0.tar.gz

* если систе­ма вер­нут ошиб­ку, уста­но­вим wget коман­да­ми yum install wget (CentOS) или apt-get install wget (Ubuntu).

Рас­па­ко­вы­ва­ем его:

tar zxvf nginx-*.tar.gz

Пере­хо­дим на стра­ни­цу с рели­за­ми моду­ля и копи­ру­ем ссыл­ку на послед­ний стабильный:

По ско­пи­ро­ван­ной ссыл­ке ска­чи­ва­ем на сер­вер исходник:

wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.tar.gz

Рас­па­ко­вы­ва­ем дан­ный исходник:

tar zxvf  v*-stable.tar.gz

Пере­хо­дим в рас­па­ко­ван­ный ката­лог с исход­ни­ка­ми модуля:

cd incubator-pagespeed-ngx-*-stable/

Коман­дой:

cat PSOL_BINARY_URL

… смот­рим, по какой ссыл­ке нуж­но загру­жать PSOL (PageSpeed Optimization Libraries). В моем слу­чае было:

https://dl.google.com/dl/page-speed/psol/1.13.35.2-$BIT_SIZE_NAME.tar.gz

$BIT_SIZE_NAME нуж­но заме­нить раз­ряд­но­стью опе­ра­ци­он­ной систе­мы, кото­рую мож­но посмот­реть командой:

uname -m

И так, в моем при­ме­ре коман­да для загруз­ки PSOL получилась:

wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz

Рас­па­ко­вы­ва­ем архив с PSOL:

tar zxvf 1.13.35.2-x64.tar.gz

* где 1.13.35.2 в назва­нии фай­ла — вер­сия PSOL.

Сборка и установка NGINX

Пере­хо­дим в ката­лог с исход­ни­ком nginx:

cd /usr/local/src/nginx-*/

Смот­рим опции сбор­ки теку­ще­го nginx (напом­ню, инструк­ция пред­по­ла­га­ет, что он уста­нов­лен на сервере):

nginx -V

Я в сво­ем слу­чае полу­чил ответ:


configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --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_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads

Нам нуж­но ско­пи­ро­вать дан­ные аргу­мен­ты и доба­вить к ним путь до исход­ни­ка загру­жен­но­го модуля:

--add-module=/usr/local/src/incubator-pagespeed-ngx-1.13.35.2-stable

* где 1.13.35.2 — вер­сия модуля.

Ито­го, полу­ча­ем и выпол­ня­ем коман­ду для кон­фи­гу­ра­ции исходника:

./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --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_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=/usr/local/src/incubator-pagespeed-ngx-1.13.35.2-stable

На запрос исполь­зо­ва­ния доступ­ных вер­сий бинар­ных фай­лов отве­ча­ем утвердительно:

Use the available Release binaries? [Y/n] Y

Если в про­цес­се кон­фи­гу­ри­ро­ва­ния появят­ся ошиб­ки, необ­хо­ди­мо само­сто­я­тель­но разо­брать­ся, како­го моду­ля не хва­та­ет в систе­ме и уста­но­вить его.

После окон­ча­ния кон­фи­гу­ри­ро­ва­ния мож­но соби­рать исходник:

make

Затем уста­нав­ли­вать nginx:

make install

Про­ве­ря­ем сбор­ку nginx:

nginx -V

Мы долж­ны уви­деть сре­ди configure arguments:

… add-module=/usr/local/src/incubator-pagespeed-ngx-1.13.35.2-stable

Настройка модуля

После пере­с­бор­ки nginx модуль pagespeed не будет вклю­чен. Для его акти­ва­ции откры­ва­ем кон­фи­гу­ра­ци­он­ный файл:

vi /etc/nginx/nginx.conf

В сек­цию http добавляем:

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

* пер­вая стро­ка вклю­ча­ет pagespeed, вто­рая — ука­зы­ва­ет на путь ката­ло­га с кэшем. Если нам нуж­но будет на вре­мя отклю­чить модуль, оста­вим pagespeed off;

Пере­за­пус­ка­ем nginx:

systemctl restart nginx

Поверка работы модуля

После того, как мы уста­но­ви­ли и при­ме­ни­ли модуль, необ­хо­ди­мо убе­дить­ся, что он исполь­зу­ет­ся при рабо­те сай­та. Мож­но сде­лать это несколь­ки­ми методами.

1. Браузер Google Chrome

Спра­вед­ли­во­сти ради, важ­но заме­тить, что для этой цели подой­дет не толь­ко дан­ный бра­у­зер. Про­сто в нашей инструк­ции мы будет выпол­нять дей­ствия на его примере.

Нам необ­хо­ди­мо посмот­реть заго­лов­ки при отве­те и убе­дить­ся, что сре­ди них есть X-Mod-Pagespeed. Для это­го запус­ка­ем бра­у­зер и кли­ка­ем F12, что­бы вызвать панель раз­ра­бот­чи­ка. Пере­хо­дим на любой сайт на нашем сер­ве­ре. В пане­ли раз­ра­бот­чи­ка пере­хо­дим в Network - кли­ка­ем по любо­му загру­жен­но­му эле­мен­ту в спис­ке сле­ва - Headers — если наш сер­вер настро­ен вер­но, мы уви­дим заго­ло­вок X-Mod-Pagespeed и вер­сию модуля:

2. Командная строка Linux

Так­же мы можем выпол­нить про­вер­ку на сер­ве­ре с помо­щью curl. Для это­го вво­дим команду:

curl -I -p http://localhost

Мы долж­ны полу­чить что-то на подбие:

HTTP/1.1 200 OK
Server: nginx/1.18.0
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Date: Fri, 03 Jul 2020 09:45:20 GMT
X-Page-Speed: 1.13.35.2-0
Cache-Control: max-age=0, no-cache

3. Используем Google PageSpeed Insights

Пере­хо­дим на стра­ни­цу PageSpeed Insights и вво­дим адрес сай­та — нажи­ма­ем Ана­ли­зи­ро­вать: