Hoe Apache HTTP te configureren met MPM Event en PHP-FPM op Ubuntu 18.04

De auteur heeft het COVID-19 Relief Fund geselecteerd om een donatie te ontvangen als onderdeel van het Write for DOnations programma.

Introductie

De Apache HTTP webserver is in de loop der jaren geëvolueerd om in verschillende omgevingen te werken en verschillende behoeften op te lossen. Een belangrijk probleem dat Apache HTTP moet oplossen, zoals elke webserver, is hoe verschillende processen moeten worden afgehandeld om een http protocol verzoek te dienen. Dit omvat het openen van een socket, het verwerken van het verzoek, het openhouden van de verbinding gedurende een bepaalde periode, het verwerken van nieuwe gebeurtenissen die via die verbinding plaatsvinden, en het terugzenden van de inhoud die is geproduceerd door een programma dat in een bepaalde taal is gemaakt (zoals PHP, Perl, of Python). Deze taken worden uitgevoerd en gecontroleerd door een Multi-Processing Module (MPM).

Apache HTTP wordt geleverd met drie verschillende MPM:

  • Pre-fork: Een nieuw proces wordt aangemaakt voor elke inkomende verbinding die de server bereikt. Elk proces is geïsoleerd van de anderen, dus er wordt geen geheugen tussen hen gedeeld, ook al voeren ze op een bepaald punt in hun uitvoering identieke aanroepen uit. Dit is een veilige manier om applicaties te draaien die gekoppeld zijn aan bibliotheken die geen threading ondersteunen-typisch oudere applicaties of bibliotheken.
  • Worker: Een ouderproces is verantwoordelijk voor het starten van een pool van kindprocessen, waarvan sommige luisteren naar nieuwe inkomende verbindingen, en andere de gevraagde inhoud serveren. Elk proces is threaded (een enkele thread kan een verbinding afhandelen) zodat een proces meerdere aanvragen tegelijk kan afhandelen. Deze methode om verbindingen te behandelen bevordert een beter gebruik van de middelen, terwijl de stabiliteit toch behouden blijft. Dit is een gevolg van de pool van beschikbare processen, die vaak vrij beschikbare threads heeft, klaar om onmiddellijk nieuwe verbindingen te bedienen.
  • Gebeurtenis: Gebaseerd op worker, gaat dit MPM nog een stap verder door te optimaliseren hoe het ouderproces taken inplant naar de kindprocessen en de daaraan gekoppelde threads. Een verbinding blijft standaard 5 seconden open en sluit als er geen nieuwe gebeurtenis plaatsvindt; dit is de standaardwaarde van de keep-alive richtlijn, die de eraan gekoppelde thread behoudt. Het Event MPM stelt het proces in staat threads te beheren, zodat sommige threads vrij zijn om nieuwe inkomende verbindingen af te handelen, terwijl andere gebonden blijven aan de live verbindingen. Het toestaan van herverdeling van toegewezen taken aan threads zorgt voor een beter gebruik van bronnen en betere prestaties.

De MPM Event module is een snelle multi-processing module die beschikbaar is op de Apache HTTP web server.

PHP-FPM is de FastCGI Process Manager voor PHP. Het FastCGI protocol is gebaseerd op de Common Gateway Interface (CGI), een protocol dat tussen applicaties en web servers zoals Apache HTTP zit. Dit laat ontwikkelaars toe om toepassingen te schrijven los van het gedrag van web servers. Programma’s voeren hun processen onafhankelijk uit en geven hun product via dit protocol door aan de webserver. Elke nieuwe verbinding die door een applicatie moet worden verwerkt, maakt een nieuw proces.

Door het MPM Event in Apache HTTP te combineren met de PHP FastCGI Process Manager (PHP-FPM) kan een website sneller laden en meer gelijktijdige verbindingen afhandelen, terwijl minder bronnen worden gebruikt.

In deze tutorial zul je de prestaties van de LAMP stack verbeteren door de standaard multi-processing module te veranderen van pre-fork naar event en door de PHP-FPM procesmanager te gebruiken om PHP code af te handelen in plaats van de klassieke mod_php in Apache HTTP.

Voorvereisten

Voordat u met deze gids begint heeft u het volgende nodig:

  • Een Ubuntu 18.04 server ingesteld door het volgen van de Ubuntu 18.04 initiële server setup gids, inclusief een sudo niet-root gebruiker en een firewall.
  • De LAMP stack geïnstalleerd op uw server volgens How To Install Linux, Apache, MySQL, PHP (LAMP stack) on Ubuntu 18.04.

Step 1 – Het veranderen van de Multi-Processing Module

Ubuntu erft scripts om Apache HTTP modules in of uit te schakelen van zijn moeder distributie, Debian. U zult deze toolset in deze stap gebruiken om de Pre-fork module uit te schakelen en de Event module in te schakelen.

In deze stap zult u Apache HTTP stoppen, de PHP 7.2 module uitschakelen die is gekoppeld aan de Pre-fork module, en vervolgens Pre-fork uitschakelen om onmiddellijk de Event module in te schakelen.

Eerst stopt u de Apache HTTP service:

  • sudo systemctl stop apache2

Nu kunt u de PHP 7.2 module, die gekoppeld is aan de Pre-fork module, uitschakelen:

  • sudo a2dismod php7.2

Daarna schakelt u de Pre-fork MPM module uit:

  • sudo a2dismod mpm_prefork

Nu de Event MPM module inschakelen:

  • sudo a2enmod mpm_event

U hebt de MPM van pre-fork naar event omgeschakeld en de PHP 7.2 module verbinding tussen PHP en Apache HTTP verwijderd. In de volgende stap installeert u de php-fpm module, evenals de bijbehorende bibliotheken en proxy modules. U configureert Apache HTTP zodat het ook met PHP kan communiceren.

Step 2 – Apache HTTP configureren om de FastCGI Process Manager te gebruiken

In dit stadium heeft u de manier waarop Apache HTTP verbindingen verwerkt veranderd door over te stappen van de Pre-fork MPM naar Event. Onderweg heb je echter de PHP module uitgeschakeld die Apache HTTP verbond met elk programma dat op PHP draait.

In deze stap installeer je de PHP-FPM processor zodat Apache HTTP weer in staat is om PHP programma’s te verwerken. En je installeert ook de afhankelijkheids bibliotheken en schakelt de modules in zodat beide soepel en sneller kunnen samenwerken dan voorheen.

Installeer eerst php-fpm. Het volgende commando installeert het PHP-FPM pakket en schakelt automatisch de met systemd geintegreerde php7.2-fpm service in, zodat de service tijdens het opstarten wordt gestart:

  • sudo apt install php-fpm

Om te kunnen communiceren, hebben Apache HTTP en PHP een bibliotheek nodig die deze capaciteit mogelijk maakt. U zult nu libapache2-mod-fcgid installeren, die kan dienen als een interface tussen programma’s met webservers, en het is specifiek voor Apache HTTP. Deze communicatie zal gebeuren via een UNIX socket.

Installeer deze library:

  • sudo apt install libapache2-mod-fcgid

U heeft php-fpm en de libapache2-mod-fcgid geinstalleerd, maar geen van beide zijn nog ingeschakeld.

Zet eerst de php-fpm module aan met het volgende commando:

  • sudo a2enconf php7.2-fpm

Tweede zet de Apache HTTP proxy module aan:

  • sudo a2enmod proxy

Terde zet de FastCGI proxy module aan in Apache HTTP:

  • sudo a2enmod proxy_fcgi

Note: U kunt de configuratie van deze interactie tussen PHP programma’s en Apache HTTP via een UNIX socket lezen met het volgende:

  • cat /etc/apache2/conf-enabled/php7.2-fpm.conf

Alles staat nu op zijn plaats zodat u Apache HTTP kunt starten. U zult eerst een configuratiecontrole uitvoeren:

  • sudo apachectl configtest
Output
Syntax OK

Daarna kunt u overgaan tot het herstarten van Apache HTTP, daar deze automatisch werd gestart bij het installeren van de FastCGI library libapache2-mod-fcgid:

  • sudo systemctl restart apache2

U heeft de php-fpm module geinstalleerd, Apache HTTP geconfigureerd om ermee te werken, de benodigde modules aangezet om het FastCGI protocol te laten werken, en de bijbehorende services gestart.

Nu Apache de Event MPM module heeft ingeschakeld en PHP-FPM aanwezig is en draait, is het tijd om te controleren of alles werkt zoals bedoeld.

Stap 3 – Uw configuratie controleren

Om te controleren of de configuratie veranderingen zijn toegepast, zult u een aantal tests uitvoeren. De eerste controleert welke multi-processing module Apache HTTP gebruikt. De tweede zal controleren of PHP de FPM manager gebruikt.

Controleer de Apache HTTP server door het volgende commando uit te voeren:

  • sudo apachectl -M | grep 'mpm'

Uw uitvoer zal als volgt zijn:

Output
mpm_event_module (shared)

U kunt hetzelfde herhalen voor de proxy module en FastCGI:

  • sudo apachectl -M | grep 'proxy'

De uitvoer zal zijn:

Output
proxy_module (shared)proxy_fcgi_module (shared)

Wenst u de volledige lijst van de modules te zien, dan kunt u het tweede deel van het commando na -M verwijderen.

Het is nu tijd om te controleren of PHP de FastCGI Process Manager gebruikt. Om dit te doen schrijft u een klein PHP script dat u alle informatie laat zien met betrekking tot PHP.

Run het volgende commando om een bestand te schrijven met de volgende naam:

  • sudo nano /var/www/your_domain/info.php

Voeg de volgende inhoud toe aan het info.php bestand:

info.php
<?php phpinfo(); ?>

Nu bezoekt u de URL van uw server en voegt info.php toe aan het eind zoals dit: http://your_domain/info.php.

De server API entry zal FPM/FastCGI zijn.

PHP Screen de server API entry FPM/FastCGI

Verwijder het info.php bestand na deze controle zodat er geen informatie over de server publiekelijk bekend wordt:

  • sudo rm /var/www/yourdomain.com/info.php

U heeft de werkende status van de MPM module, de modules die de FastCGI afhandelen en de afhandeling van PHP code gecontroleerd.

Conclusie