nginx с ngx_pagespeed и поддержкой alpn для centos / debian / ubuntu

update:
актуальные бинарники доступны по ссылке https://dl.ispsystem.info/nginx-binary/lasted/


Готовая сборка Nginx с модулем ngx_pagespeed (google pagespeed) для популярных операционных систем CentOS 6.9, 7.4 / Debian 7, 8, 9 / Ubuntu 14.04/16.04 x86_64

Также для CentOS 6 / Debian 7,8 / Ubuntu 14.4 nginx собран с openssl 1.0.2 (--with-openssl=/root/openssl-1.0.2l) чтобы была поддержка ALPN для http2, в CentOS 7.4 и других системах системный OpenSSL поддерживает ALPN начиная с версии 1.0.2

В CentOS 7.3 (в дистрибутиве openssl 1.0.1e) и меньших версиях необходимо для запуска nginx обновить пакет openssl (yum install openssl обновит до 1.0.2k-8) иначе будет ошибка запуска nginx связанная со старой библиотекой в системе

Для Debian 7 новые версии pagespeed не поддерживаются, новый nginx 1.13.6 также не собирается со старым ngx_pagespeed, поэтому используется nginx 1.12.2 stable и pagespeed старой версии 1.11.33.1-beta (bash <(curl -f -L -sS https://ngxpagespeed.com/install) -n 1.12.2 -v 1.11.33.1).
Настоятельно рекомендую мигрировать на более новую версию операционной системы

Ссылки на бинарный файл nginx - его надо просто положить в /usr/sbin/nginx вместо исходного файла (предварительно установив nginx через пакетный менеджер системы):

https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-openssl-1.0.2l-centos6
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-centos7
https://dl.ispsystem.info/nginx-binary/nginx-1.12.2-pagespeed-1.11.33.1-openssl-1.0.2l-debian7
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-openssl-1.0.2l-debian8
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-debian9 
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-openssl-1.0.2l-ubuntu14.04
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-ubuntu16.04

Также собраны бинарники для замены /usr/sbin/nginx с openssl 1.0.2 без модуля pagespeed для старых операционных систем где openssl не имеет поддержки alpn (требуется для http2):

https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-centos6
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-debian7
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-debian8
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-ubuntu14.04

Ключи сборки соответствуют стандартным с официального репозитория nginx (посмотреть как nginx -V), за исключением опции компиляции и линковки при использовании внешнего openssl
Debian 7/8:
--with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
изменено на
--with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --with-openssl=/root/openssl-1.0.2l

CentOS 6:
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
изменено на
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --with-openssl=/root/openssl-1.0.2l

Так как иначе openssl не собирается с ошибками
/usr/bin/ld: /root/openssl-1.0.2l/.openssl/lib/libssl.a(s23_meth.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/root/openssl-1.0.2l/.openssl/lib/libssl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
objs/Makefile:365: recipe for target 'objs/nginx' failed


Возможно, это пригодится кому-либо при компиляции nginx с собственным openssl

Подключается pagespeed в nginx.conf секции http - собственно включение, запрет оптимизировать phpmyadmin и админ-панель сайтов на bitrix (с ними работает некорректно), путь к каталогу кэша nginx и ограничения.
Процесс очистки кэша будет запускаться раз в час и очищаться если размер превысит 512Mb или 100000 inodes

pagespeed on;
pagespeed Disallow */phpmyadmin/*;
pagespeed Disallow */bitrix/admin/*;
pagespeed FileCachePath /var/cache/ngx_pagespeed/;
pagespeed FileCacheSizeKb            524288;
pagespeed FileCacheInodeLimit        100000;
pagespeed FileCacheCleanIntervalMs   3600000;

Далее необходимо просто создать директорию
mkdir /var/cache/ngx_pagespeed/

После перезапуска nginx в ней появятся поддиректории с файлами кэша

Подключается http2 просто добавлением http2 в server
listen 443 ssl http2;

При использовании ISPmanager 5 можно отредактировать шаблон /usr/local/mgr5/etc/templates/default/nginx-vhosts-ssl.template

заменить

listen {% $NGINX_SSL_LISTEN_ON %} default_server;
на
listen {% $NGINX_SSL_LISTEN_ON %} ssl http2 default_server;

listen {% $NGINX_SSL_LISTEN_ON %}
на
listen {% $NGINX_SSL_LISTEN_ON %} ssl http2;

Чтобы не переписывался при обновлениях файл /usr/bin/nginx можно сделать в Debian/Ubuntu:

# dpkg-divert --divert /usr/sbin/nginx.unuse --rename /usr/sbin/nginx
# mv /usr/sbin/nginx.unuse /usr/sbin/nginx
 
В CentOS:
# yum install yum-plugin-versionlock
# yum versionlock nginx


Полезные ссылки:
https://www.modpagespeed.com/doc/build_ngx_pagespeed_from_source 
https://habrahabr.ru/post/301452/
http://nginx.org/ru/download.html

2 комментария:

  1. Собрал свежий бинарник nginx со свежим pagespeed для актуальных ОСей, брать тут
    http://dl.ispsystem.info/nginx-binary/201810/ и ставить stripped версию

    то есть

    http://dl.ispsystem.info/nginx-binary/201810/nginx-1.15.5-pagespeed-1.13.35.2-stripped-centos7
    http://dl.ispsystem.info/nginx-binary/201810/nginx-1.15.5-pagespeed-1.13.35.2-stripped-debian9
    http://dl.ispsystem.info/nginx-binary/201810/nginx-1.15.5-pagespeed-1.13.35.2-stripped-ubuntu16

    Опции сборки обычные для всех систем http://dl.ispsystem.info/nginx-binary/201810/configure-options-nginx-1.15.5.txt

    ОтветитьУдалить
    Ответы
    1. а для centos 6 планируется освежить бинарник?

      Удалить