Как сделать поддержку PCRE2 для Apache 2.4 +5


Хочу поделится своим опытом перевода Apache 2.4 на PCRE2, так как даже PHP 7 уже давно поддерживает библиотеку PCRE2, а open source Apache Software Foundation все еще нет.
Конечно я сейчас наверно опережаю релиз Apache с поддержкой PCRE2, так как я использую исходники с гита Apache, что говорит нам о поддержке PCRE2 уже возможно в следующем релизе, но для тех кто уже сейчас хочет поддержку PCRE2 в Apache 2.4, и кто не хочет ждать релиза делюсь одним из способов.

Статья предполагает что вы собираете весь необходимый софт из исходников, список софта и версий на момент написания статьи:

PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41


Шаг первый: собираем и компилируем PCRE2


Опустим момент скачивания исходников с оф источников так как это слишком очевидно, итак вы распаковали архив, переходим в папку с исходниками PCRE2, и выполняем следующую команду для поддержки UTF:

./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode

В префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки:

--prefix=/ваш/путь/до библиотеки

Иначе собираете без префикса.

Остальные команды указывают на включение поддерживающие 8-битный, 16-битный и 32-битный кодовые блоки PCRE, в данном варианте сборка была выполнена с ними.

Ну и конечно компилируем это дело при помощи последовательного выполнения команд:

make
make install

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

Шаг второй: подключаем в APR библиотеку PCRE2


Так как Apache компилирует исходники при помощи APR, нам нужно подключить библиотеку в самом APR, иначе возможны ошибки об неизвестных функциях в исходниках Apache, потому что мы будем использовать новые функции PCRE2.

Опустим момент скачивания исходников с оф источников так как это слишком очевидно, итак вы распаковали архив выполнили конфигурацию APR:

./configure --prefix=/etc/webserver/apr-170

Естественно в префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки, или не указываете:

--prefix=/ваш/путь/до библиотеки

После выполнения конфигурации идете в каталог: /etc/webserver/srcsrv/apr-1.7.0/build

Ну или: /ваш/путь/до библиотеки/build

Находите файл apr_rules.mk в этом каталоге, и добавляете вконец строки где:

EXTRA_LIBS=-lrt -lcrypt  -lpthread -ldl

Подключение библиотеки:

-lpcre2-8 -L/ваш/путь/до библиотеки pcre2/lib

Сохраняем идем в корневой каталог исходников APR: /ваш/путь/до библиотеки.

Компилируем наш измененный APR:

make
make install

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

Шаг третий: собираем из исходников APR-util для Apache


Вы скачали данную библиотеку с оф источника, переходим в корневую папку распакованного архива с APR-util, и вводим последовательно следующие команды:

./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/ваш/путь/до библиотеки apr
make
make install

Естественно в префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки, или не указываете:

--prefix=/ваш/путь/до библиотеки

Так же тут мы подключаем наш APR:

--with-apr=/ваш/путь/до библиотеки apr

Шаг четвертый: скачиваем исходники из гита Apache для поддержки PCRE2


Важно: Исходники качаем из гита самой последней редакции.

Нам необходимо скачать два исходника такие как ap_regex.h и util_pcre.c, ссылки ниже:
ap_regex.h
util_pcre.c

Теперь идем в свою директорию исходников Apache httpd, и собираем Apache со следующими командами:

./configure --prefix=/etc/webserver/apache-2441 --with-apr=/ваш/путь/до библиотеки apr --with-apr-util=/ваш/путь/до библиотеки apr-util --with-pcre=/ваш/путь/до библиотеки pcre2/bin/pcre2-config

Естественно в префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки, или не указываете:

--prefix=/ваш/путь/до Apache httpd

Так же дополнительные команды для сборки Apache указываете на свое усмотрение, я имею ввиду команды включения отключения модулей и библиотек.

Далее идем в свою директорию исходников Apache httpd, у меня это:

/etc/webserver/srcsrv/httpd-2.4.41

Вы естественно переходите в свой каталог, заменяем в каталоге:

/etc/webserver/srcsrv/httpd-2.4.41/include

Файл ap_regex.h, на скачанный нами с гита Apache.

Так же идем в каталог:

/etc/webserver/srcsrv/httpd-2.4.41/server

Заменяем файл util_pcre.c, на скачанный нами с гита Apache

Теперь осталось добавить подключение PCRE2 в самом Apache, необходимо найти файл ap_config_auto.h, он находится в каталоге:

/etc/webserver/srcsrv/httpd-2.4.41/include

В самом начале данного файла вставить следующие строки:

/* Load PCRE2 */
#define HAVE_PCRE2 1

Ну вот теперь мы готовы к истинному моменту компиляции Apache httpd с поддержкой PCRE2.
Переходим в свою директорию исходников Apache httpd, компилируем это дело при помощи последовательного выполнения команд:

make
make install

Вот теперь если все прошло хорошо и без ошибок, то у вас будет собранный и скомпилированный Apache httpd с поддержкой PCRE2, что означает положительные изменения в модулях Apache использующих PCRE регулярные выражения, одним из таких является Module rewrite.

В заключении, данный способ дает возможность использовать PCRE2 до оф релиза от Apache Software Foundation, надеюсь что уже скоро выйдет версия с поддержкой PCRE2.

Так же во время тестирования стандартных .htaccess, ошибок не возникало, если у кого будут ошибки пишите в комментах.

P.S.


Меня немного напрягала ситуация использования двух разных версий PCRE для моего стека, и я решил исправить это.




К сожалению, не доступен сервер mySQL