Cum să faci suport pentru PCRE2 pe Apache 2.4

Vreau să-mi împărtășesc experiența de a traduce Apache 2.4 pe PCRE2, având în vedere că PHP 7 susține de mult biblioteca PCRE2, iar Apache Software Foundation open source încă nu.
Desigur, probabil că acum anticipez lansarea Apache cu suport pentru PCRE2, deoarece folosesc sursele de pe Git-ul Apache, ceea ce sugerează că suportul PCRE2 ar putea fi disponibil în următoarea lansare, dar pentru cei care doresc déjà suport PCRE2 în Apache 2.4 și nu vor să aștepte lansarea, împărtășesc una dintre metode.

Articolul presupune că adunați tot software-ul necesar din surse, lista software-ului și versiunilor la momentul redactării articolului:

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

Pasul întâi: compilăm și construim PCRE2

Vom sări peste descărcarea surselor din sursele oficiale, deoarece este prea evident, așa că ați dezarhivat arhiva, mergeți în folderul cu sursele PCRE2 și executați următoarea comandă pentru suport UTF:

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

În prefață specificați calea, dacă nu doriți să folosiți locația standard pentru instalarea bibliotecii:

--prefix=/calea/ta/catre biblioteca

În caz contrar, construiți fără prefix.

Celelalte comenzi specifică includerea suportului pentru blocurile de cod PCRE de 8, 16 și 32 de biți, în această variantă construcția a fost realizată cu ele.

Și, bineînțeles, compilăm acest lucru prin executarea secvențială a comenzilor:

make
make install

Dacă totul este în regulă și compilarea a decurs fără erori, trecem la următorul pas.

Pasul doi: conectarea bibliotecii PCRE2 în APR

Întrucât Apache compilează sursele prin APR, trebuie să conectăm biblioteca în APR, altfel este posibil să apară erori legate de funcții necunoscute în sursele Apache, deoarece vom folosi funcții noi din PCRE2.

Vom sări peste descărcarea surselor din sursele oficiale, deoarece este prea evident, așa că ați dezarhivat arhiva și ați realizat configurarea APR:

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

Bineînțeles, în prefață specificați calea, dacă nu doriți să folosiți locația standard pentru instalarea bibliotecii sau nu specificați:

--prefix=/calea/ta/catre biblioteca

După realizarea configurării, mergeți în directorul: /etc/webserver/srcsrv/apr-1.7.0/build

Sau: /calea/ta/catre biblioteca/build

Găsiți fișierul apr_rules.mk în acest director și adăugați la sfârșitul liniei unde:

EXTRA_LIBS=-lrt -lcrypt -lpthread -ldl

Conectarea bibliotecii:

-lpcre2-8 -L/calea/ta/catre biblioteca pcre2/lib

Salvăm și mergem în directorul rădăcină al surselor APR: /calea/ta/către bibliotecă.

Compilăm APR-ul nostru modificat:

make
make install

Dacă totul este în regulă și compilarea a decurs fără erori, trecem la următorul pas.

Pasul trei: compilăm sursele APR-util pentru Apache

Ați descărcat această bibliotecă din sursa oficială, mergem în directorul rădăcină al arhivei dezarhivate cu APR-util și introducem următoarele comenzi în ordine:

./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/calea/ta/către bibliotecă apr
make
make install

Bineînțeles, în prefață specificați calea, dacă nu doriți să folosiți locația standard pentru instalarea bibliotecii sau nu specificați:

--prefix=/calea/ta/catre biblioteca

De asemenea, aici conectăm APR-ul nostru:

--with-apr=/calea/ta/către bibliotecă apr

Pasul patru: descărcăm sursele din Git-ul Apache pentru suportul PCRE2

Important: Descărcăm sursele din Git în cea mai recentă versiune.

Trebuie să descărcăm două fișiere sursă, cum ar fi ap_regex.h și util_pcre.c, legăturile sunt mai jos:
ap_regex.h
util_pcre.c

Acum mergem în directorul nostru de surse Apache httpd și compilăm Apache folosind următoarele comenzi:

./configure --prefix=/etc/webserver/apache-2441 --with-apr=/calea/ta/către bibliotecă apr --with-apr-util=/calea/ta/către bibliotecă apr-util --with-pcre=/calea/ta/către bibliotecă pcre2/bin/pcre2-config

Bineînțeles, în prefață specificați calea, dacă nu doriți să folosiți locația standard pentru instalarea bibliotecii sau nu specificați:

--prefix=/calea/ta/către Apache httpd

De asemenea, indicați comenzi suplimentare pentru compilarea Apache la alegerea dumneavoastră, referindu-mă la comenzi de activare/dezactivare a modulelor și bibliotecilor.

Apoi mergem în directorul nostru de surse Apache httpd, al meu este:

/etc/webserver/srcsrv/httpd-2.4.41

Natural, treceți în propriul dumneavoastră catalog, înlocuind în folder:

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

Fișierul ap_regex.h, cu cel descărcat de noi din Git-ul Apache.

De asemenea, mergem în catalog:

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

Înlocuim fișierul util_pcre.c cu cel descărcat de noi din Git-ul Apache

Acum trebuie să adăugăm conectarea PCRE2 în însăși Apache, este necesar să găsim fișierul ap_config_auto.h, care se află în folderul:

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

În chiar începutul acestui fișier, inserați următoarele rânduri:

/* Load PCRE2 */
#define HAVE_PCRE2 1

Acum suntem gata pentru adevăratul moment al compilării Apache httpd cu suport pentru PCRE2.
Mergem în directorul nostru de surse Apache httpd și compilăm acest lucru prin executarea secvențială a comenzilor:

make
make install

Acum, dacă totul a decurs bine și fără erori, ar trebui să aveți un Apache httpd compilat și construit cu suport pentru PCRE2, ceea ce înseamnă modificări pozitive în modulele Apache care utilizează expresii regulate PCRE, unul dintre acestea fiind Modul rewrite.

În concluzie, această metodă permite utilizarea PCRE2 până la lansarea oficială de la Apache Software Foundation, sper că în curând va fi lansată o versiune cu suport pentru PCRE2.

De asemenea, în timpul testării fișierelor .htaccess standard, nu au apărut erori; dacă cineva întâmpină erori, vă rog să scrieți în comentarii.

P.S.

M-a stresat puțin situația utilizării a două versiuni diferite de PCRE pentru stiva mea, așa că am decis să rezolv acest lucru.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster