Хочу поділитись своїм досвідом перекладу Apache 2.4 на PCRE2, оскільки навіть PHP 7 вже давно підтримує бібліотеку PCRE2, а open source Apache Software Foundation досі немає.
Звичайно я зараз напевно випереджаю реліз Apache з підтримкою PCRE2, тому що я використовую вихідники з гіта Apache, що говорить нам про підтримку PCRE2 вже можливо в наступному релізі, але для тих, хто вже зараз хоче підтримку PCRE2 в Apache 2.4, і хто не хоче чекати релізу ділюся одним із способів.
Стаття передбачає, що ви збираєте весь необхідний софт із вихідних джерел, список софту та версій на момент написання статті:
PCRE2-10.33
КВІТНЯ 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, посилання нижче:
Тепер йдемо до своєї директорії вихідників 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 PCRE, одним з таких є Module rewrite.
У висновку, цей спосіб дає можливість використовувати PCRE2 до оф релізу від Apache Software Foundation, сподіваюся, що вже скоро вийде версія з підтримкою PCRE2.
Так само під час тестування стандартних .htaccess помилок не виникало, якщо у кого будуть помилки пишіть у коментах.
PS
Мене трохи напружувало ситуацію використання двох різних версій PCRE для мого стека, і я вирішив виправити це.
Джерело: habr.com