Sådan konfigureres Apache HTTP med MPM Event og PHP-FPM på Ubuntu 18.04

Forfatteren har valgt COVID-19 Relief Fund til at modtage en donation som en del af Write for DOnations-programmet.

Introduktion

Apache HTTP-webserveren har udviklet sig gennem årene til at fungere i forskellige miljøer og løse forskellige behov. Et vigtigt problem, som Apache HTTP skal løse, er som enhver webserver, hvordan man håndterer forskellige processer for at betjene en http-protokolanmodning. Dette indebærer at åbne en socket, behandle anmodningen, holde forbindelsen åben i en vis periode, håndtere nye hændelser, der opstår gennem denne forbindelse, og returnere det indhold, der er produceret af et program, der er lavet i et bestemt sprog (f.eks. PHP, Perl eller Python). Disse opgaver udføres og styres af et MPM (Multi-Processing Module).

Apache HTTP leveres med tre forskellige MPM:

  • Pre-fork: Der oprettes en ny proces for hver indgående forbindelse, der når serveren. Hver proces er isoleret fra de andre, så der deles ingen hukommelse mellem dem, selv om de udfører identiske kald på et tidspunkt i deres udførelse. Dette er en sikker måde at køre programmer, der er knyttet til biblioteker, som ikke understøtter threading – typisk ældre programmer eller biblioteker.
  • Worker: En overordnet proces er ansvarlig for at starte en pulje af underordnede processer, hvoraf nogle lytter efter nye indgående forbindelser, og andre serverer det ønskede indhold. Hver proces er trådopdelt (en enkelt tråd kan håndtere én forbindelse), så én proces kan håndtere flere anmodninger samtidig. Denne metode til behandling af forbindelser tilskynder til bedre ressourceudnyttelse, samtidig med at stabiliteten opretholdes. Dette er et resultat af puljen af tilgængelige processer, som ofte har ledige tilgængelige tråde, der er klar til straks at betjene nye forbindelser.
  • Begivenhed: Baseret på worker går denne MPM et skridt videre ved at optimere, hvordan den overordnede proces planlægger opgaver til de underordnede processer og de tråde, der er knyttet til disse. En forbindelse forbliver som standard åben i 5 sekunder og lukkes, hvis der ikke sker nogen ny hændelse; dette er standardværdien for keep-alive-direktivet, som bevarer den tilknyttede tråd. Event MPM gør det muligt for processen at administrere tråde, således at nogle tråde er frie til at håndtere nye indgående forbindelser, mens andre holdes bundet til de levende forbindelser. Ved at tillade omfordeling af tildelte opgaver til tråde opnås en bedre ressourceudnyttelse og ydeevne.

MPM Event-modulet MPM er et hurtigt multiprocesseringsmodul, der er tilgængeligt på Apache HTTP-webserveren.

PHP-FPM er FastCGI Process Manager for PHP. FastCGI-protokollen er baseret på Common Gateway Interface (CGI), en protokol, der befinder sig mellem programmer og webservere som Apache HTTP. Dette gør det muligt for udviklere at skrive programmer uafhængigt af webservernes adfærd. Programmerne kører deres processer uafhængigt og sender deres produkt til webserveren via denne protokol. Hver ny forbindelse, der skal behandles af et program, opretter en ny proces.

Gennem at kombinere MPM-hændelsen i Apache HTTP med PHP FastCGI Process Manager (PHP-FPM) kan et websted indlæses hurtigere og håndtere flere samtidige forbindelser, samtidig med at der bruges færre ressourcer.

I denne vejledning forbedrer du LAMP-stackens ydeevne ved at ændre standardmodulet for multiprocessing fra pre-fork til event og ved at bruge PHP-FPM-processmanageren til at håndtere PHP-kode i stedet for den klassiske mod_php i Apache HTTP.

Forudsætninger

Hvor du begynder denne vejledning, skal du have følgende:

  • En Ubuntu 18.04-server, der er opsat ved at følge vejledningen om Ubuntu 18.04’s første serveropsætning, herunder en sudo ikke-root-bruger og en firewall.
  • LAMP-stakken installeret på din server ved at følge Sådan installeres Linux, Apache, MySQL, PHP (LAMP-stakken) på Ubuntu 18.04.

Stræk 1 – Ændring af Multi-Processing-modulet

Ubuntu arver scripts til at aktivere eller deaktivere Apache HTTP-moduler fra sin moderdistribution, Debian. Du vil bruge dette værktøjssæt i dette trin til at deaktivere Pre-fork-modulet og aktivere Event-modulet.

I dette trin vil du stoppe Apache HTTP, deaktivere PHP 7.2-modulet, der er knyttet til Pre-fork-modulet, og derefter deaktivere Pre-fork for straks at aktivere Event-modulet.

Først stopper du Apache HTTP-tjenesten:

  • sudo systemctl stop apache2

Nu kan du deaktivere PHP 7.2-modulet, som er knyttet til Pre-fork-modulet:

  • sudo a2dismod php7.2

Dernæst deaktiverer du Pre-fork MPM-modulet:

  • sudo a2dismod mpm_prefork

Aktiver nu Event MPM-modulet:

  • sudo a2enmod mpm_event

Du har skiftet MPM’en fra pre-fork til event og fjernet PHP 7.2-modulets forbindelse mellem PHP og Apache HTTP. I det næste trin installerer du php-fpm-modulet samt de relaterede biblioteker og proxy-moduler. Du konfigurerer Apache HTTP, så den også kan kommunikere med PHP.

Strin 2 – Konfigurering af Apache HTTP til at bruge FastCGI Process Manager

På dette trin har du skiftet den måde, Apache HTTP behandler forbindelser på, ved at gå fra Pre-fork MPM til Event. Undervejs har du dog deaktiveret PHP-modulet, der forbandt Apache HTTP med ethvert program, der kører på PHP.

I dette trin installerer du PHP-FPM-processoren, så Apache HTTP igen er i stand til at behandle PHP-programmer. Og du installerer også afhængighedsbibliotekerne og aktiverer modulerne, så begge kan samarbejde gnidningsløst og hurtigere end før.

Først installerer du php-fpm. Følgende kommando installerer PHP-FPM-pakken, og den aktiverer automatisk php7.2-fpm-tjenesten integreret med systemd, så tjenesten startes ved opstart:

  • sudo apt install php-fpm

For at kunne kommunikere har Apache HTTP og PHP brug for et bibliotek, der muliggør denne kapacitet. Du skal nu installere libapache2-mod-fcgid, som kan fungere som en grænseflade mellem programmer med webservere, og det er specifikt for Apache HTTP. Denne kommunikation vil ske gennem en UNIX-socket.

Installer dette bibliotek:

  • sudo apt install libapache2-mod-fcgid

Du har installeret php-fpm og libapache2-mod-fcgid, men ingen af dem er aktiveret endnu.

Først aktiverer du php-fpm-modulet med følgende kommando:

  • sudo a2enconf php7.2-fpm

For det andet aktiverer du Apache HTTP proxy-modulet:

  • sudo a2enmod proxy

For det tredje aktiverer du FastCGI proxy-modulet i Apache HTTP:

  • sudo a2enmod proxy_fcgi

Bemærk: Du kan læse konfigurationen af denne interaktion mellem PHP-programmer og Apache HTTP via en UNIX-socket med følgende:

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

Det hele er nu på plads, så du kan starte Apache HTTP. Du foretager først en konfigurationskontrol:

  • sudo apachectl configtest
Output
Syntax OK

Dernæst kan du fortsætte med at genstarte Apache HTTP, da det automatisk blev startet, da du installerede FastCGI-biblioteket libapache2-mod-fcgid:

  • sudo systemctl restart apache2

Du har installeret modulet php-fpm, konfigureret Apache HTTP til at arbejde med det, aktiveret de nødvendige moduler, så FastCGI-protokollen kan fungere, og startet de tilsvarende tjenester.

Nu hvor Apache har Event MPM-modulet aktiveret, og PHP-FPM er til stede og kører, er det tid til at kontrollere, at alt fungerer efter hensigten.

Stræk 3 – Kontrol af din konfiguration

For at kontrollere, at konfigurationsændringerne er blevet anvendt, skal du køre nogle tests. Den første vil kontrollere, hvilket multiprocesseringsmodul Apache HTTP bruger. Den anden vil verificere, at PHP bruger FPM-manageren.

Kontroller Apache HTTP-serveren ved at køre følgende kommando:

  • sudo apachectl -M | grep 'mpm'

Din output vil være som følger:

Output
mpm_event_module (shared)

Du kan gentage det samme for proxy-modulet og FastCGI:

  • sudo apachectl -M | grep 'proxy'

Opdatet vil vise:

Output
proxy_module (shared)proxy_fcgi_module (shared)

Hvis du ønsker at se hele listen over modulerne, kan du fjerne den anden del af kommandoen efter -M.

Det er nu tid til at kontrollere, om PHP bruger FastCGI Process Manager. For at gøre det skal du skrive et lille PHP-script, der viser dig alle oplysninger relateret til PHP.

Kør følgende kommando for at skrive en fil med følgende navn:

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

Føj følgende indhold til info.php-filen:

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

Besøg nu din servers URL og tilføj info.php til sidst på følgende måde: http://your_domain/info.php.

Serverens API-post vil være FPM/FastCGI.

PHP Screen server-API-posten FPM/FastCGI

Slet info.php-filen efter denne kontrol, så ingen oplysninger om serveren offentliggøres:

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

Du har kontrolleret arbejdsstatus for MPM-modulet, modulerne, der håndterer FastCGI, og håndteringen af PHP-kode.

Konklusion