如何使 PCRE2 支持 Apache 2.4

我想分享一下我将 Apache 2.4 翻译成 PCRE2 的经验,因为即使 PHP 7 已经支持 PCRE2 库很长时间了,但开源 Apache 软件基金会仍然不支持。
当然,我现在可能领先于具有 PCRE2 支持的 Apache 版本,因为我使用的是 Apache git 的源代码,它告诉我们在下一个版本中已经可以支持 PCRE2,但对于那些已经希望在Apache 2,谁不想等待发布我分享的方法之一。

本文假设您正在从源代码、撰写本文时的软件和版本列表中收集所有必需的软件:

PCRE2-10.33
1.7.0年XNUMX月
APR-util 1.6.1
阿帕奇 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

如果一切正常并且编译没有错误,请继续下一步。

第二步:将PCRE2库连接到APR

由于 Apache 使用 APR 编译源代码,因此我们需要将库包含在 APR 本身中,否则 Apache 源代码中可能会出现有关未知函数的错误,因为我们将使用新的 PCRE2 函数。

让我们省略从官方来源下载源代码的时刻,因为这太明显了,因此您解压了存档并执行了 APR 配置:

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

当然,如果您不想使用标准位置来安装库,或者不指定,则可以在前缀中指明您的路径:

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

配置完成后,进入目录:/etc/webserver/srcsrv/apr-1.7.0/build

或者:/你的/路径/到库/构建

在此目录中找到 apr_rules.mk 文件,并在末尾添加以下行:

EXTRA_LIBS=-lrt -lcrypt  -lpthread -ldl

连接库:

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

保存并转到 APR 源的根目录:/your/path/to the library。

让我们编译修改后的 APR:

make
make install

如果一切正常并且编译没有错误,请继续下一步。

第三步:从源代码为 Apache 构建 APR-util

您已经从源下载了该库,使用 APR-util 进入解压后的存档的根文件夹,然后依次输入以下命令:

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

当然,如果您不想使用标准位置来安装库,或者不指定,则可以在前缀中指明您的路径:

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

我们还在这里连接我们的年利率:

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

第四步:从 Apache git 下载源代码以支持 PCRE2

重要提示:我们从最新版本的 git 下载源代码。

我们需要下载两个源例如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

我们从 Apache git 下载的文件 ap_regex.h。

我们也进入目录:

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

我们将文件 util_pcre.c 替换为从 Apache git 下载的文件

现在剩下的就是在 Apache 本身中添加 PCRE2 连接,您需要找到文件 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

现在,如果一切顺利并且没有错误,那么您将已经组装并编译了支持 PCRE2 的 Apache httpd,这意味着使用 PCRE 正则表达式的 Apache 模块发生了积极的变化,其中之一就是模块重写。

综上所述,这种方法使得在Apache软件基金会正式发布之前使用PCRE2成为可能,希望早日发布支持PCRE2的版本。

另外,在测试标准.htaccess时,没有出现任何错误,如果有人有任何错误,请写在评论中。

PS

我对我的堆栈使用两个不同版本的 PCRE 的情况感到有点困惑,我决定修复它。

来源: habr.com

添加评论