Cum se configurează Apache HTTP cu MPM Event și PHP-FPM pe FreeBSD 12.0

Autorul a selectat Open Internet/Free Speech Fund pentru a primi o donație ca parte a programului Write for DOnations.

Introducere

Serverul web Apache HTTP a evoluat de-a lungul anilor pentru a funcționa în diferite medii și pentru a rezolva diferite nevoi. O problemă importantă pe care Apache HTTP trebuie să o rezolve, ca orice server web, este cum să gestioneze diferite procese pentru a servi o cerere de protocol http. Acest lucru implică deschiderea unui socket, procesarea cererii, menținerea conexiunii deschise pentru o anumită perioadă, gestionarea evenimentelor noi care apar prin acea conexiune și returnarea conținutului produs de un program realizat într-un anumit limbaj (cum ar fi PHP, Perl sau Python). Aceste sarcini sunt efectuate și controlate de un modul de procesare multiplă (MPM).

Apache HTTP vine cu trei MPM-uri diferite:

  • Pre-fork: Un nou proces este creat pentru fiecare conexiune de intrare care ajunge pe server. Fiecare proces este izolat de celelalte, astfel încât nicio memorie nu este partajată între ele, chiar dacă ele efectuează apeluri identice la un moment dat în execuția lor. Aceasta este o modalitate sigură de a rula aplicații legate de biblioteci care nu acceptă threading – de obicei aplicații sau biblioteci mai vechi.
  • Worker: Un proces părinte este responsabil pentru lansarea unui grup de procese copil, dintre care unele ascultă pentru noi conexiuni primite, iar altele servesc conținutul solicitat. Fiecare proces este filetat (un singur fir poate gestiona o singură conexiune), astfel încât un proces poate gestiona mai multe cereri simultan. Această metodă de tratare a conexiunilor încurajează o mai bună utilizare a resurselor, menținând în același timp stabilitatea. Acesta este un rezultat al fondului de procese disponibile, care adesea are fire disponibile libere, gata să servească imediat noile conexiuni.
  • Eveniment: Bazat pe worker, acest MPM merge un pas mai departe prin optimizarea modului în care procesul părinte programează sarcinile către procesele copil și firele asociate acestora. În mod implicit, o conexiune rămâne deschisă timp de 5 secunde și se închide dacă nu apare niciun eveniment nou; aceasta este valoarea implicită a directivei keep-alive, care păstrează firul asociat acesteia. Event MPM permite procesului să gestioneze fire de execuție, astfel încât unele fire de execuție să fie libere pentru a gestiona noile conexiuni primite, în timp ce altele sunt păstrate legate de conexiunile active. Permițând redistribuirea sarcinilor atribuite firelor de execuție va permite o mai bună utilizare a resurselor și o mai bună performanță.

Modul Event MPM este un modul de multiprocesare rapidă disponibil pe serverul web Apache HTTP.

PHP-FPM este FastCGI Process Manager pentru PHP. Protocolul FastCGI se bazează pe Common Gateway Interface (CGI), un protocol care se află între aplicații și serverele web precum Apache HTTP. Acest lucru permite dezvoltatorilor să scrie aplicații separat de comportamentul serverelor web. Programele își execută procesele în mod independent și transmit produsul lor către serverul web prin intermediul acestui protocol. Fiecare nouă conexiune care are nevoie de procesare de către o aplicație va crea un nou proces.

Prin combinarea evenimentului MPM din Apache HTTP cu PHP FastCGI Process Manager (PHP-FPM), un site web se poate încărca mai repede și poate gestiona mai multe conexiuni concurente, utilizând în același timp mai puține resurse.

În acest tutorial veți îmbunătăți performanța stivei FAMP prin schimbarea modulului implicit de multiprocesare de la pre-fork la event și prin utilizarea managerului de proces PHP-FPM pentru a gestiona codul PHP în locul clasicului mod_php din Apache HTTP.

Precondiții prealabile

Înainte de a începe acest ghid veți avea nevoie de următoarele:

  • Un server FreeBSD 12.0 configurat după acest ghid.
  • Stacheta FAMP instalată pe serverul dumneavoastră după acest tutorial.
  • Acces la un utilizator cu privilegii de root (sau permis prin utilizarea sudo) pentru a putea face modificări de configurare.

Pasul 1 – Schimbarea modulului de multiprocesare

Vă veți începe prin a căuta directiva pre-fork în fișierul httpd.conf. Acesta este fișierul principal de configurare pentru Apache HTTP, în care puteți activa și dezactiva modulele. Puteți edita și seta directive cum ar fi portul de ascultare în care Apache HTTP va servi conținutul sau locația conținutului care urmează să fie afișat în acest fișier.

Pentru a face aceste modificări, veți folosi programul nl, number line, cu steagul -ba pentru a număra și numerota liniile, astfel încât nimic să nu se potrivească greșit într-o etapă ulterioară. Combinată cu grep, această comandă va număra mai întâi toate liniile din fișierul specificat în cale și, odată terminată, va căuta șirul de caractere pe care îl căutați.

Executați următoarea comandă pentru ca programul nl să proceseze și să numere liniile din httpd.conf. Apoi, grep va procesa ieșirea căutând șirul de caractere dat 'mod_mpm_prefork':

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

Ca ieșire veți vedea ceva asemănător cu:

Output
67 LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

Să edităm linia 67 cu editorul de text. În acest tutorial, veți folosi vi, care este editorul implicit de pe FreeBSD:

  • sudo vi +67 /usr/local/etc/apache24/httpd.conf

Aplicați un simbol # la începutul liniei astfel încât această linie să fie comentată, astfel:

/usr/local/etc/apache24/httpd.conf
...# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so...

Prin adăugarea simbolului # ați dezactivat modulul MPM pre-fork.

Acum veți găsi directiva de evenimente în același fișier httpd.conf.

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

Vă veți vedea o ieșire similară cu următoarea:

Output
...66 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so...

Acum veți elimina simbolul # din linia 66 pentru a activa MPM Event:

  • sudo vi +66 /usr/local/etc/apache24/httpd.conf

Directiva se va citi acum după cum urmează:

/usr/local/etc/apache24/httpd.conf
...LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so...

Acum că ați schimbat configurația de la MPM pre-fork la event, puteți elimina pachetul mod_php73 care conectează procesorul PHP la Apache HTTP, deoarece nu mai este necesar și va interfera dacă va rămâne în sistem:

  • sudo pkg remove -y mod_php73

Asigurați-vă că configurația este corectă executând următoarea comandă pentru a testa:

  • sudo apachectl configtest

Dacă vedeți Syntax OK în ieșire, puteți reporni serverul Apache HTTP:

  • sudo apachectl restart

Nota: Dacă există și alte conexiuni HTTP în curs de execuție pe serverul dvs. se recomandă o repornire grațioasă în loc de o repornire obișnuită. Acest lucru va asigura că utilizatorii nu sunt împinși afară, pierzându-și conexiunea:

  • sudo apachectl graceful

Ați trecut MPM de la pre-fork la event și ați eliminat modulul mod_php73 conexiune PHP la Apache HTTP. În pasul următor veți instala modulul PHP-FPM și veți configura Apache HTTP astfel încât să poată comunica mai rapid cu PHP.

Pasul 2 – Configurarea Apache HTTP pentru a utiliza managerul de proces FastCGI

FreeBSD are mai multe versiuni suportate de PHP pe care le puteți instala prin intermediul managerului de pachete. Pe FreeBSD sunt compilate diferite binare ale diverselor versiuni disponibile, în loc să se folosească doar una singură, așa cum oferă majoritatea distribuțiilor GNU/Linux în depozitele lor implicite. Pentru a urma cele mai bune practici, veți folosi versiunea suportată, pe care o puteți verifica pe pagina de versiuni suportate de PHP.

În acest pas veți adăuga PHP-FPM ca un serviciu care rulează pentru a porni la pornire. De asemenea, veți configura Apache HTTP pentru a lucra cu PHP prin adăugarea unei configurații dedicate pentru modul, precum și prin activarea unor module suplimentare în httpd.conf.

Primul lucru pe care îl veți face este să adăugați 'php_fpm_enable=YES' la fișierul /etc/rc.conf pentru ca serviciul PHP-FPM să poată porni. Veți face acest lucru folosind comanda sysrc:

  • sudo sysrc php_fpm_enable="YES"

Apoi veți adăuga modulul php-fpm în directorul modulului Apache, astfel încât acesta să fie configurat pentru a fi utilizat de Apache HTTP. Creați următorul fișier pentru a face acest lucru:

  • sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

Adaugați următoarele în 030_php-fpm.conf:

/usr/local/etc/apache24/modules.d/030_php-fpm.conf
<IfModule proxy_fcgi_module> <IfModule dir_module> DirectoryIndex index.php </IfModule> <FilesMatch "\.(php|phtml|inc)$"> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch></IfModule>

Aceasta afirmă că, dacă modulul 'proxy_fcgi' este activat, precum și 'dir_module', atunci orice fișiere procesate care corespund extensiilor din paranteze ar trebui să fie gestionate de managerul de proces FastCGI care rulează pe mașina locală prin portul 9000 – ca și cum mașina locală ar fi un server proxy. Acesta este locul în care modulul PHP-FPM și Apache HTTP se interconectează. Pentru a realiza acest lucru, veți activa alte module în timpul acestei etape.

Pentru a activa modulul proxy, îl veți căuta mai întâi în fișierul httpd.conf:

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

Vă veți vedea o ieșire similară cu următoarea:

Output
...129 #LoadModule proxy_module libexec/apache24/mod_proxy.so...

Voi decomenta linia eliminând simbolul #:

  • sudo vi +129 /usr/local/etc/apache24/httpd.conf

Linia va arăta după cum urmează odată editată:

/usr/local/etc/apache24/httpd.conf
...LoadModule proxy_module libexec/apache24/mod_proxy.so...

Acum puteți activa modulul FastCGI. Găsiți modulul cu următoarea comandă:

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

Vă veți vedea ceva asemănător cu ce urmează:

Output
...133 #LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so...

Acum decomentați linia 133 așa cum ați făcut deja cu celelalte module:

  • sudo vi +133 /usr/local/etc/apache24/httpd.conf

Vă veți lăsa linia după cum urmează:

/usr/local/etc/apache24/httpd.conf
...LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so...

După ce ați făcut acest lucru veți porni serviciul PHP-FPM:

Și veți reporni Apache pentru ca acesta să încarce cele mai recente modificări de configurare care încorporează modulul PHP:

  • sudo apachectl restart

Ați instalat modulul PHP-FPM, ați configurat Apache HTTP pentru a lucra cu acesta, ați activat modulele necesare pentru ca protocolul FastCGI să funcționeze și ați pornit serviciile corespunzătoare.

Acum că Apache are modulul Event MPM activat și PHP-FPM este prezent și funcționează, este timpul să verificați dacă totul funcționează așa cum a fost prevăzut.

Etapa 3 – Verificarea configurației

Pentru a verifica dacă modificările de configurare au fost aplicate, veți rula câteva teste. Primul va verifica ce modul de multiprocesare folosește Apache HTTP. Al doilea va verifica dacă PHP folosește managerul FPM.

Verificați serverul Apache HTTP prin rularea următoarei comenzi:

  • sudo apachectl -M | grep 'mpm'

Va fi următoarea ieșire:

Output
mpm_event_module (shared)

Puteți repeta același lucru pentru modulul proxy și FastCGI:

  • sudo apachectl -M | grep 'proxy'

La ieșire se va afișa:

Output
proxy_module (shared)proxy_fcgi_module (shared)

Dacă doriți să vedeți întreaga listă de module, puteți elimina a doua parte a comenzii, după -M.

Acum este timpul să verificăm dacă PHP folosește FastCGI Process Manager. Pentru a face acest lucru veți scrie un script PHP foarte mic care vă va arăta toate informațiile legate de PHP.

Executați următoarea comandă pentru a scrie un fișier numit astfel:

  • sudo vi /usr/local/www/apache24/data/info.php

Adaugați următorul conținut în fișierul info.php:

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

Acum vizitați URL-ul serverului dvs. și adăugați info.php la sfârșit astfel: http://your_server_IP_address/info.php.

Intrarea API a serverului va fi FPM/FastCGI.

PHP Screen the Server API entry FPM/FastCGI

Nu uitați să ștergeți fișierul info.php după această verificare pentru ca nicio informație despre server să nu fie dezvăluită public.

  • sudo rm /usr/local/www/apache24/data/info.php

Ați verificat starea de funcționare a modulului MPM, a modulelor care gestionează FastCGI și a gestionării codului PHP.

Concluzie

.

Leave a Reply