如何使 PCRE2 支援 Apache 2.4

我想分享我將 Apache 2.4 翻譯成 PCRE2 的經驗,因為即使 PHP 7 已經支援 PCRE2 庫很長時間了,但開源 Apache 軟體基金會仍然不支援。
當然,我現在可能領先於具有 PCRE2 支援的 Apache 版本,因為我使用的是 Apache git 的源代碼,它告訴我們在下一個版本中已經可以支援 PCRE2,但對於那些已經希望在Apache 2,誰不想等待發布我分享的方法之一。

本文假設您正在從原始程式碼、撰寫本文時的軟體和版本清單中收集所有必要的軟體:

PCRE2-10.33
4月1.7.0
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時,沒有出現任何錯誤,如果有人有任何錯誤,請寫在評論中。

聚苯乙烯

我對我的堆疊使用兩個不同版本的 PCRE 的情況感到有點困惑,我決定修復它。

來源: www.habr.com

添加評論