Хочу поделится своим опытом перевода 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, и выполняем следующую команду для поддержки UTF:
В префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки:
Иначе собираете без префикса.
Остальные команды указывают на включение поддерживающие 8-битный, 16-битный и 32-битный кодовые блоки PCRE, в данном варианте сборка была выполнена с ними.
Ну и конечно компилируем это дело при помощи последовательного выполнения команд:
Если все норм и компиляция прошла без ошибок, переходим к следующему шагу.
Так как Apache компилирует исходники при помощи APR, нам нужно подключить библиотеку в самом APR, иначе возможны ошибки об неизвестных функциях в исходниках Apache, потому что мы будем использовать новые функции PCRE2.
Опустим момент скачивания исходников с оф источников так как это слишком очевидно, итак вы распаковали архив выполнили конфигурацию APR:
Естественно в префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки, или не указываете:
После выполнения конфигурации идете в каталог: /etc/webserver/srcsrv/apr-1.7.0/build
Ну или: /ваш/путь/до библиотеки/build
Находите файл apr_rules.mk в этом каталоге, и добавляете вконец строки где:
Подключение библиотеки:
Сохраняем идем в корневой каталог исходников APR: /ваш/путь/до библиотеки.
Компилируем наш измененный APR:
Если все норм и компиляция прошла без ошибок, переходим к следующему шагу.
Вы скачали данную библиотеку с оф источника, переходим в корневую папку распакованного архива с APR-util, и вводим последовательно следующие команды:
Естественно в префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки, или не указываете:
Так же тут мы подключаем наш APR:
Важно: Исходники качаем из гита самой последней редакции.
Нам необходимо скачать два исходника такие как ap_regex.h и util_pcre.c, ссылки ниже:
ap_regex.h
util_pcre.c
Теперь идем в свою директорию исходников Apache httpd, и собираем Apache со следующими командами:
Естественно в префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки, или не указываете:
Так же дополнительные команды для сборки Apache указываете на свое усмотрение, я имею ввиду команды включения отключения модулей и библиотек.
Далее идем в свою директорию исходников Apache httpd, у меня это:
Вы естественно переходите в свой каталог, заменяем в каталоге:
Файл ap_regex.h, на скачанный нами с гита Apache.
Так же идем в каталог:
Заменяем файл util_pcre.c, на скачанный нами с гита Apache
Теперь осталось добавить подключение PCRE2 в самом Apache, необходимо найти файл ap_config_auto.h, он находится в каталоге:
В самом начале данного файла вставить следующие строки:
Ну вот теперь мы готовы к истинному моменту компиляции Apache httpd с поддержкой PCRE2.
Переходим в свою директорию исходников Apache httpd, компилируем это дело при помощи последовательного выполнения команд:
Вот теперь если все прошло хорошо и без ошибок, то у вас будет собранный и скомпилированный Apache httpd с поддержкой PCRE2, что означает положительные изменения в модулях Apache использующих PCRE регулярные выражения, одним из таких является Module rewrite.
В заключении, данный способ дает возможность использовать PCRE2 до оф релиза от Apache Software Foundation, надеюсь что уже скоро выйдет версия с поддержкой PCRE2.
Так же во время тестирования стандартных .htaccess, ошибок не возникало, если у кого будут ошибки пишите в комментах.
Меня немного напрягала ситуация использования двух разных версий PCRE для моего стека, и я решил исправить это.
Конечно я сейчас наверно опережаю релиз 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 для моего стека, и я решил исправить это.