» » Apache en HTTP/2

Apache en HTTP/2

Geplaatst in: Nieuws, Techniek | 0

HTTP/2: Introductie

HTTP/2 is een grote sprong vooruit van HTTP/1.0. HTTP/2 is afgeleid van het vroegere experimentele SPDY protocol. Het SPDY protocol werd oorspronkelijk door Google ontwikkeld. 3DN heeft besloten om over te schakelen naar HTTP/2 zodat onze webpaginas nog sneller laden. In dit technologie artikel zullen we wat van de uitdagingen beschrijven die we tegen kwamen teneinde dit te configureren op Debian Linux 9. HTTP/2 is niet gloednieuw, het is al voorgesteld aan de IESG (Internet Engineering Steering Group) in December 2014. De meeste grote browsers hadden HTTP/2 ondersteuning eind 2015. 3DN heeft besloten om HTTP/2 te gaan gebruiken op haar sites aangezien het al enige tijd redelijk stabiel lijkt te zijn. Echter pas vanag werd er een nieuwe release van de Apache HTTP/2 module aangekondigd die, zoals de change-file zegt: fixed a lot of bugs. Uiteraard houden wij van snel-ladende webpaginas maar security staat op nummer #1 bij 3DN gezien de security uitdagingen op het internet vandaag de dag.

Apache: MPM Prefork en HTTP/2

Lorentz Attractor
Lorentz Attractor

De Apache webserver heeft soms wat last van de wet van de verlammende voorsprong. Deze geïmpliceerde wetmatigheid zorgt er vaak voor dat oudere technologie vaak decennia-lang ondersteund dient te blijven. Apache Multi-Processing Modules (MPM) ondersteunen al decennia lang het ‘prefork’ mechanisme. Wanneer Apache geconfigureerd is om MPM Prefork te gebruiken worden er bij het opstarten een aantal heavy-weight processen opgestart die ieder als werkbij functioneren. Hoewel dit mechanisme oud en degelijk is schaadt het tevens de reputatie van Apache als zijnde een trage en, in termen van computing, duur proces. Voor veel minder ervaren systeembeheerders is MPM Preload echter de eerste, en vaak de enige, methode om Apache te configureren.

Apache zit echter niet stil en heeft tevens zgn. threaded multi processing modules geintroduceerd. Ze bestaan al vrij lang maar doordat ze niet de standaard omgeving zijn zijn ze lang niet altijd in gebruik. Dit zijn de MPM Worker en MPM Event. De HTTP/2 module voor Apache heeft onlangs ondersteuning voor MPM Prefork opgezegd:

apache2 (2.4.25-3+deb9u5) stretch; urgency=medium

* This package upgrades mod_http2 to the version from apache2 2.4.33. This
fixes a lot of bugs and some security issues, but it also removes the
support for using HTTP/2 when running with mpm_prefork. HTTP/2 support
is only provided when running with mpm_event or mpm_worker.

Hoewel dit er mogelijk al een tijd lang zat aan te komen zal het toch waarschijnlijk een vrij grote schok door het Linux landschap laten gaan. De vraag is dan wel of de HTTP/2 adoptatie dit vol kan houden. Bij 3DN hebben we echter besloten om uiteindelijk als deel van de migratie naar HTTP/2 tevens te migreren naar MPM Event. Ook deze change en haar consequenties zullen we in dit artikel bekijken.

PHP: De Spelbreker

Begrijp ons niet verkeerd. We houden van PHP bij 3DN. Na een zeer lange en zeer bewogen periode van jaren waarin PHP een zeer slechte reputatie opbouwde vanwege beveilinging problemen is PHP uiteindelijk een bijzonder aantrekkelijk development platform geworden. PHP stelt echter tevens eisen aan Apache. We noemen hier PHP even de spelbreker omdat een van die eigen is dat wanneer PHP als Apache module word geladen moet de Apache MPM prefork module geconfigureerd zijn. Of dit nu ontstaan is in het verleden omdat één van de leading PHP ontwikkelaars ooit eens heeft gezegd dat PHP zich niet leent in de huidige vorm voor threads is soms nog een beetje een raadsel. Feit is echter dat wanneer op Debian de MPM Event module word geactiveerd, PHP word gedeactiveerd. Het hierna proberen te enablen van PHP resulteert in een bericht:

root@gamma:/usr/share/doc/apache2# a2dismod mpm_prefork
ERROR: The following modules depend on mpm_prefork and need to be disabled first: php7.0

Zowel PHP als HTTP/2 zijn echter belangrijk voor 3DN in de toekomst. We kunnen hier dus niet eenvoudig bij de pakken neerzitten. De oplossing dient zich aan in de vorm van een andere zeer populaire optimalisatie genaamd PHP FPM. PHP FPM is alweer wat ouder. 3DN heeft zich in het verleden vaak van FPM (FastCGI Process Manager) bedient. Met FPM kan een zeer snelle PHP stack gebouwd worden gebruik makend van de NGinx webserver. Met PHP FPM word PHP als het ware uit Apache getrokken en worden PHP requests door de Apache server doorgegeven aan een ander proces, het PHP FPM proces. Dit proces wat via het FastCGI mechanisme word aangesproken, regelt zelfstandig het resource gebruik van PHP.

FPM: FastCGI Process Manager

Gezien bovenstaande constateringen zullen nu meer en meer sites die performance willen leveren stap voor stap naar HTTP/2 moeten migreren. Dit betekent tevens dat naar onze mening PHP FPM belangrijker zal worden. PHP FPM heeft echter veel flexibiliteit in haar configuratie. Mede door deze grote flexibiliteit is het configuratie process lastiger dan de standaard Apache PHP module.

Door het inrichten van PHP FPM maken we het echter tevens mogelijk om aan loadbalancing te gaan doen. In onze huidige setup waar onze eigen sites niet zo vaak bekeken worden hebben we voldoende aan het opstarten van PHP FPM op dezelfde machine als Apache. Echter, een PHP FPM stack kan tevens op één of meerdere remote machines draaien waarbij Apache besluit naar welke machine de afzonderlijke requests worden gestuurd.

Conclusies

HTTP/2 kan een snelheidsverbetering van een faktor ~3 veroorzaken. Hoort u geregeld dat uw site nogal traag lijkt te zijn en heeft u alles al geprobeerd van snellere servers tot meer bandbreedte tot meer geheugen? Doet u dan eens de HTTP/2 test en controleer of uw website HTTP/2 ondersteunt.

Uit bovenstaande kunt u mogelijk al concluderen dat het configureren van een combinatie van HTTP/2, Apache, SSL, PHP geen eenvoudige aangelegenheid is. Het is zeker niet geschikt voor zelfs de professionele junior systeembeheerder, laat staan voor een gemiddelde internet hobbyist. 3DN heeft het echter in de praktijk draaiend en wil u graag van dienst zijn om dit voor u te configureren. U kunt 3DN inhuren voor kortlopende projecten als ZZP inhuur.

Related

Googlebot gebruikt geen HTTP/2 Googlebot is Dood. Lang leven de nieuwe Googlebot! Recent heeft 3DN besloten om HTTP/2 te gaan gebruiken op haar websites. Dit besluit kwam niet gehe...
Tomcat Catalina: Configuratie 3DN HTTP/2 Search Engine: Catalina Recent hebben we drieste plannen gepubliceerd omtrent de competitie die we aangaan met Google. Bij 3DN gebruiken w...
WordPress: Schrijf uw eigen plugin, Deel 3 WordPress: Een Kunst Database Plugin, Deel 3 In het vorige deel van deze serie hebben we gezien hoe we super eenvoudig een plugin kunnen maken. We he...
Solr: Een Zoekmachine Solr: Een Zoekmachine++ Recent kondigden we aan dat we onze eigen zoekmachine gaan opzetten. Enige dagen aan onderzoek zijn voorbij en we houden u gr...

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *