Ik wil mijn ervaring delen met de vertaling van Apache 2.4 naar PCRE2, aangezien zelfs PHP 7 al lang de PCRE2-bibliotheek ondersteunt, terwijl de open source Apache Software Foundation dat nog steeds niet doet.
Natuurlijk loop ik misschien voor op de release van Apache met ondersteuning voor PCRE2, omdat ik de bronnen van de Apache-git gebruik, wat ons vertelt dat de ondersteuning voor PCRE2 mogelijk in de volgende release zal zitten, maar voor degenen die nu al PCRE2-ondersteuning in Apache 2.4 willen en niet willen wachten op de release, deel ik een van de methoden.
Dit artikel gaat ervan uit dat je alle benodigde software uit de bronnen compileert, de lijst van software en versies op het moment van schrijven van dit artikel:
PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41
Stap ƩƩn: verzamel en compileer PCRE2
We laten het moment van het downloaden van de bronnen vanaf de officiƫle bronnen achterwege, omdat dit te voor de hand liggend is, dus je hebt het archief uitgepakt, ga naar de map met de PCRE2-bronnen en voer de volgende opdracht uit voor UTF-ondersteuning:
./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicodeIn het prefix geef je je pad op als je de standaardlocatie voor de installatie van de bibliotheek niet wilt gebruiken:
--prefix=/jouw/pad/naar/bibliotheekAnders compileer je zonder prefix.
De andere opdrachten geven aan dat je ondersteuning inschakelt voor 8-bits, 16-bits en 32-bits PCRE-codeblokken; in dit geval is de build met hen uitgevoerd.
En natuurlijk compileren we dit met behulp van de opeenvolgende uitvoering van de opdrachten:
make
make install Als alles goed gaat en de compilatie zonder fouten is voltooid, gaan we naar de volgende stap.
Stap twee: voeg de PCRE2-bibliotheek toe aan APR
Aangezien Apache de bronnen compileert met behulp van APR, moeten we de bibliotheek in de APR zelf toevoegen, anders kunnen er fouten optreden over onbekende functies in de Apache-bronnen, omdat we nieuwe functies van PCRE2 zullen gebruiken.
We laten het moment van het downloaden van de bronnen vanaf de officiƫle bronnen achterwege, omdat dit te voor de hand liggend is, dus je hebt het archief uitgepakt en de configuratie van APR uitgevoerd:
./configure --prefix=/etc/webserver/apr-170Natuurlijk geef je in het prefix je pad op als je de standaardlocatie voor de installatie van de bibliotheek niet wilt gebruiken, of je geeft niets op:
--prefix=/jouw/pad/naar/bibliotheekNa het uitvoeren van de configuratie ga je naar de map: /etc/webserver/srcsrv/apr-1.7.0/build
Of: /jouw/pad/naar/bibliotheek/build
Zoek het bestand apr_rules.mk in deze map en voeg aan het einde van de regel toe waar:
EXTRA_LIBS=-lrt -lcrypt -lpthread -ldlVoeg de bibliotheek toe:
-lpcre2-8 -L/jouw/pad/naar/bibliotheek pcre2/libWe gaan naar de hoofdmap van de APR-bronbestanden: /jouw/pad/naar de bibliotheek.
We compileren onze aangepaste APR:
make
make installAls alles goed gaat en de compilatie zonder fouten is voltooid, gaan we naar de volgende stap.
Stap drie: we bouwen APR-util uit de bron voor Apache
Je hebt deze bibliotheek gedownload van de officiƫle bron, ga naar de hoofdmap van het uitgepakte archief met APR-util en voer achtereenvolgens de volgende commando's in:
./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/jouw/pad/naar de bibliotheek apr
make
make installNatuurlijk geef je in het prefix je pad op als je de standaardlocatie voor de installatie van de bibliotheek niet wilt gebruiken, of je geeft niets op:
--prefix=/jouw/pad/naar/bibliotheekHier koppelen we ook onze APR aan:
--with-apr=/jouw/pad/naar de bibliotheek aprStap vier: download de bronbestanden uit de Apache-git voor ondersteuning van PCRE2
Belangrijk: Download de bronbestanden uit de nieuwste git-editie.
We moeten twee bronbestanden downloaden, namelijk ap_regex.h en util_pcre.c, links hieronder:
Ga nu naar je directory met Apache httpd-bronnen en bouw Apache met de volgende commando's:
./configure --prefix=/etc/webserver/apache-2441 --with-apr=/jouw/pad/naar de bibliotheek apr --with-apr-util=/jouw/pad/naar de bibliotheek apr-util --with-pcre=/jouw/pad/naar de bibliotheek pcre2/bin/pcre2-configNatuurlijk geef je in het prefix je pad op als je de standaardlocatie voor de installatie van de bibliotheek niet wilt gebruiken, of je geeft niets op:
--prefix=/jouw/pad/naar Apache httpdGeef ook extra commando's voor het bouwen van Apache op jouw keuze, ik bedoel commando's om modules en bibliotheken in- of uit te schakelen.
Ga verder naar je directory met Apache httpd-bronnen, voor mij is dat:
/etc/webserver/srcsrv/httpd-2.4.41Je gaat natuurlijk naar jouw map, vervang in de map:
/etc/webserver/srcsrv/httpd-2.4.41/includeHet bestand ap_regex.h, door datgene dat we hebben gedownload van de Apache-git.
Ga ook naar de map:
/etc/webserver/srcsrv/httpd-2.4.41/serverVervang het bestand util_pcre.c, door datgene dat we hebben gedownload van de Apache-git.
Nu blijft alleen nog het toevoegen van de PCRE2-koppeling in Apache zelf, we moeten het bestand ap_config_auto.h vinden, dat bevindt zich in de map:
/etc/webserver/srcsrv/httpd-2.4.41/includeAan het begin van dit bestand invoegen we de volgende regels:
/* Load PCRE2 */
#define HAVE_PCRE2 1 Nou, nu zijn we klaar voor het echte moment van compilatie van Apache httpd met ondersteuning voor PCRE2.
Ga naar je directory met Apache httpd-bronnen en compileer dit door de commando's achtereenvolgens uit te voeren:
make
make installAls alles goed is gegaan en er geen fouten zijn opgetreden, heb je een gebouwde en gecompileerde Apache httpd met ondersteuning voor PCRE2, wat positieve veranderingen betekent in de Apache-modules die PCRE-reguliere expressies gebruiken, een van deze is Module rewrite.
Tot slot, deze manier biedt de mogelijkheid om PCRE2 te gebruiken tot de officiƫle release van de Apache Software Foundation, ik hoop dat de versie met ondersteuning voor PCRE2 snel zal verschijnen.
Ook tijdens het testen van de standaard .htaccess zijn er geen fouten opgetreden, als iemand foutmeldingen heeft, laat het me weten in de reacties.
P.S.
Ik vond het een beetje vervelend dat er twee verschillende versies van PCRE in mijn stack werden gebruikt, en ik besloot dit op te lossen.
Bron: habr.com
