Cách tạo hỗ trợ PCRE2 cho Apache 2.4

Tôi muốn chia sẻ kinh nghiệm dịch Apache 2.4 sang PCRE2 của mình, vì ngay cả PHP 7 cũng đã hỗ trợ thư viện PCRE2 từ lâu, nhưng Apache Software Foundation mã nguồn mở vẫn chưa hỗ trợ.
Tất nhiên, hiện tại có lẽ tôi đã đi trước bản phát hành Apache có hỗ trợ PCRE2, vì tôi đang sử dụng các nguồn từ git Apache, điều này cho chúng ta biết rằng hỗ trợ PCRE2 đã có sẵn trong bản phát hành tiếp theo, nhưng đối với những người đã muốn hỗ trợ PCRE2 trong Apache 2.4 và những người không muốn chờ phát hành, tôi chia sẻ một trong các cách.

Bài viết giả định rằng bạn đang thu thập tất cả các phần mềm cần thiết từ mã nguồn, danh sách phần mềm và phiên bản tại thời điểm viết bài:

PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41

Bước một: xây dựng và biên dịch PCRE2

Hãy bỏ qua thời điểm tải nguồn từ các nguồn chính thức vì điều này quá rõ ràng nên bạn đã giải nén kho lưu trữ, đi tới thư mục chứa nguồn PCRE2 và chạy lệnh sau để hỗ trợ UTF:

./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode

Chỉ định đường dẫn của bạn trong tiền tố nếu bạn không muốn sử dụng vị trí tiêu chuẩn để cài đặt thư viện:

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

Nếu không, bạn thu thập mà không có tiền tố.

Các lệnh còn lại biểu thị việc bao gồm các hỗ trợ cho các khối mã PCRE 8 bit, 16 bit và 32 bit, trong phiên bản này việc lắp ráp được thực hiện với chúng.

Và tất nhiên, chúng tôi biên dịch thứ này bằng cách thực hiện tuần tự các lệnh:

make
make install

Nếu mọi thứ đều ổn và quá trình biên dịch không có lỗi, hãy chuyển sang bước tiếp theo.

Bước hai: kết nối thư viện PCRE2 với APR

Vì Apache biên dịch các nguồn bằng APR, nên chúng tôi cần đưa thư viện vào chính APR, nếu không, có thể xảy ra lỗi về các hàm không xác định trong các nguồn Apache, vì chúng tôi sẽ sử dụng các hàm PCRE2 mới.

Chúng ta hãy bỏ qua khoảnh khắc tải nguồn từ các nguồn chính thức vì điều này quá rõ ràng nên bạn đã giải nén kho lưu trữ và thực hiện cấu hình APR:

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

Đương nhiên, bạn chỉ ra đường dẫn của mình trong tiền tố nếu bạn không muốn sử dụng vị trí tiêu chuẩn để cài đặt thư viện hoặc nếu bạn không chỉ định:

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

Sau khi hoàn tất cấu hình, hãy vào thư mục: /etc/webserver/srcsrv/apr-1.7.0/build

Hoặc: /your/path/đến thư viện/build

Tìm tệp apr_rules.mk trong thư mục này và thêm các dòng ở cuối:

EXTRA_LIBS=-lrt -lcrypt  -lpthread -ldl

Kết nối thư viện:

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

Lưu và đi đến thư mục gốc của nguồn APR: /your/path/to the thư viện.

Hãy tổng hợp APR đã sửa đổi của chúng tôi:

make
make install

Nếu mọi thứ đều ổn và quá trình biên dịch không có lỗi, hãy chuyển sang bước tiếp theo.

Bước ba: xây dựng APR-util cho Apache từ các nguồn

Bạn đã tải xuống thư viện này từ nguồn, đi tới thư mục gốc của kho lưu trữ đã giải nén bằng APR-util và nhập tuần tự các lệnh sau:

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

Đương nhiên, bạn chỉ ra đường dẫn của mình trong tiền tố nếu bạn không muốn sử dụng vị trí tiêu chuẩn để cài đặt thư viện hoặc nếu bạn không chỉ định:

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

Chúng tôi cũng kết nối APR của mình tại đây:

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

Bước bốn: tải xuống nguồn từ Apache git để hỗ trợ PCRE2

Quan trọng: Chúng tôi tải xuống nguồn từ phiên bản git mới nhất.

Chúng ta cần tải XNUMX nguồn như ap_regex.h và util_pcre.c, link dưới đây:
ap_regex.h
util_pcre.c

Bây giờ hãy vào thư mục nguồn Apache httpd của bạn và xây dựng Apache bằng các lệnh sau:

./configure --prefix=/etc/webserver/apache-2441 --with-apr=/ваш/путь/до библиотеки apr --with-apr-util=/ваш/путь/до библиотеки apr-util --with-pcre=/ваш/путь/до библиотеки pcre2/bin/pcre2-config

Đương nhiên, bạn chỉ ra đường dẫn của mình trong tiền tố nếu bạn không muốn sử dụng vị trí tiêu chuẩn để cài đặt thư viện hoặc nếu bạn không chỉ định:

--prefix=/ваш/путь/до Apache httpd

Bạn cũng có thể chỉ định các lệnh bổ sung để xây dựng Apache theo ý mình, ý tôi là các lệnh để bật hoặc tắt các mô-đun và thư viện.

Tiếp theo chúng ta đi đến thư mục nguồn Apache httpd, tôi có cái này:

/etc/webserver/srcsrv/httpd-2.4.41

Bạn tự nhiên vào thư mục của mình, thay thế trong thư mục:

/etc/webserver/srcsrv/httpd-2.4.41/include

Tệp ap_regex.h mà chúng tôi đã tải xuống từ git Apache.

Chúng tôi cũng đi đến thư mục:

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

Chúng tôi thay thế tệp util_pcre.c bằng tệp chúng tôi đã tải xuống từ git Apache

Bây giờ tất cả những gì còn lại là thêm kết nối PCRE2 vào chính Apache, bạn cần tìm tệp ap_config_auto.h, nó nằm trong thư mục:

/etc/webserver/srcsrv/httpd-2.4.41/include

Ở đầu tập tin này, chèn các dòng sau:

/* Load PCRE2 */
#define HAVE_PCRE2 1

Chà, bây giờ chúng ta đã sẵn sàng cho thời điểm thực sự biên dịch Apache httpd với sự hỗ trợ PCRE2.
Hãy đi tới thư mục nguồn Apache httpd của chúng tôi và biên dịch nó bằng cách thực hiện tuần tự các lệnh:

make
make install

Bây giờ, nếu mọi thứ diễn ra tốt đẹp và không có lỗi thì bạn đã tập hợp và biên dịch Apache httpd với hỗ trợ PCRE2, nghĩa là có những thay đổi tích cực trong các mô-đun Apache sử dụng biểu thức chính quy PCRE, một trong số đó là viết lại Mô-đun.

Tóm lại, phương pháp này giúp bạn có thể sử dụng PCRE2 trước khi được phát hành chính thức từ Apache Software Foundation, tôi hy vọng rằng phiên bản có hỗ trợ PCRE2 sẽ sớm được phát hành.

Ngoài ra trong quá trình test .htaccess chuẩn không có lỗi nào xảy ra, ai có lỗi gì thì ghi vào bình luận nhé.

PS

Tôi hơi bối rối trước tình huống sử dụng hai phiên bản PCRE khác nhau cho ngăn xếp của mình và tôi quyết định sửa nó.

Nguồn: www.habr.com

Thêm một lời nhận xét