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 и вводим адрес сайта — нажимаем Анализировать: