Как стать автором
Поиск
Написать публикацию
Обновить

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

Время на прочтение4 мин
Количество просмотров1.3K
Хочу поделится своим опытом перевода 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 для моего стека, и я решил исправить это.
Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Публикации

Ближайшие события