Apache HTTP:n konfigurointi MPM-tapahtuman ja PHP-FPM:n avulla Ubuntu 18.04:ssä
Tekijä valitsi COVID-19-avustusrahaston saamaan lahjoituksen osana Write for DOnations -ohjelmaa.
Esittely
Apache HTTP -verkkopalvelin on kehittynyt vuosien varrella toimimaan erilaisissa ympäristöissä ja ratkaisemaan erilaisia tarpeita. Yksi tärkeä ongelma, joka Apache HTTP:n on ratkaistava, kuten minkä tahansa web-palvelimen, on se, miten käsitellä eri prosesseja palvelemaan http-protokollan pyyntöä. Tähän kuuluu socketin avaaminen, pyynnön käsittely, yhteyden pitäminen auki tietyn ajan, yhteyden kautta tapahtuvien uusien tapahtumien käsittely ja tietyllä kielellä (kuten PHP, Perl tai Python) tehdyn ohjelman tuottaman sisällön palauttaminen. Näitä tehtäviä suorittaa ja ohjaa moniprosessointimoduuli (Multi-Processing Module, MPM).
Apache HTTP:ssä on kolme erilaista MPM:ää:
- Pre-fork: Jokaiselle palvelimelle saapuvalle yhteydelle luodaan uusi prosessi. Jokainen prosessi on eristetty muista, joten niiden välillä ei jaeta muistia, vaikka ne suorittaisivat identtisiä kutsuja jossain vaiheessa suoritustaan. Tämä on turvallinen tapa suorittaa sovelluksia, jotka on linkitetty kirjastoihin, jotka eivät tue säikeistystä – tyypillisesti vanhempiin sovelluksiin tai kirjastoihin.
- Työntekijä: Vanhempiprosessi vastaa siitä, että se käynnistää joukon lapsiprosesseja, joista osa kuuntelee uusia saapuvia yhteyksiä ja osa palvelee pyydettyä sisältöä. Jokainen prosessi on säikeistetty (yksi säie voi käsitellä yhtä yhteyttä), joten yksi prosessi voi käsitellä useita pyyntöjä samanaikaisesti. Tämä yhteyksien käsittelytapa edistää resurssien parempaa käyttöä ja säilyttää samalla vakauden. Tämä on seurausta käytettävissä olevien prosessien poolista, jossa on usein vapaita käytettävissä olevia säikeitä valmiina palvelemaan välittömästi uusia yhteyksiä.
- Tapahtuma: Workeriin perustuva tämä MPM menee askeleen pidemmälle optimoimalla, miten emoprosessi aikatauluttaa tehtäviä lapsiprosesseille ja niihin liittyville säikeille. Yhteys pysyy oletusarvoisesti auki 5 sekuntia ja sulkeutuu, jos uutta tapahtumaa ei tapahdu; tämä on keep-alive-direktiivin oletusarvo, joka säilyttää siihen liittyvän säikeen. Event MPM:n avulla prosessi voi hallita säikeitä siten, että jotkin säikeet ovat vapaita käsittelemään uusia saapuvia yhteyksiä, kun taas toiset säikeet pidetään sidottuina eläviin yhteyksiin. Kun sallitaan osoitettujen tehtävien uudelleenjako säikeille, resurssien käyttö ja suorituskyky paranevat.
Tapahtuma-MPM-moduuli on nopea moniprosessointimoduuli, joka on käytettävissä Apache HTTP -verkkopalvelimella.
PHP-FPM on FastCGI-prosessinhallinta PHP:lle. FastCGI-protokolla perustuu Common Gateway Interface (CGI) -protokollaan, joka on sovellusten ja verkkopalvelimien, kuten Apache HTTP:n, välissä. Tämä antaa kehittäjille mahdollisuuden kirjoittaa sovelluksia erillään web-palvelimien käyttäytymisestä. Ohjelmat suorittavat prosessinsa itsenäisesti ja välittävät tuotteensa web-palvelimelle tämän protokollan kautta. Jokainen uusi yhteys, jonka sovellus tarvitsee käsittelyä, luo uuden prosessin.
Yhdistämällä Apache HTTP:n MPM-tapahtuma ja PHP FastCGI-prosessinhallinta (PHP-FPM) verkkosivusto voi latautua nopeammin ja käsitellä useampia samanaikaisia yhteyksiä samalla, kun se käyttää vähemmän resursseja.
Tässä opetusohjelmassa parannetaan LAMP-pinon suorituskykyä muuttamalla oletusarvoinen moniprosessointimoduuli esihaarukasta tapahtumaprosessiksi (engl. prefork) ja käyttämällä Apache HTTP:ssä käytetyn klassisen prosessinhallintaohjelman (engl. mod_php
) sijasta prosessinhallintaohjelmaa (engl. process manager), joka on tarkoitettu PHP:n PHP:n prosessinhallintaohjelmaksi.
Edellytykset
Ennen kuin aloitat tämän oppaan, tarvitset seuraavat:
- Yksi Ubuntu 18.04 -palvelin, joka on asennettu noudattamalla Ubuntu 18.04 -palvelimen alkuasennusoppaan ohjeita, mukaan lukien sudo-käyttäjä, joka ei ole root-käyttäjä, ja palomuuri.
- Palvelimelle asennettu LAMP-pino ohjeen How To Install Linux, Apache, MySQL, PHP (LAMP stack) on Ubuntu 18.04 mukaisesti.
Vaihe 1 – Moniprosessointimoduulin muuttaminen
Ubuntu perii skriptit Apache HTTP -moduulien ottamiseksi käyttöön tai poistamiseksi käytöstä emojakelustaan Debianista. Käytät tätä työkalupakkia tässä vaiheessa Pre-fork-moduulin poistamiseksi käytöstä ja Event-moduulin ottamiseksi käyttöön.
Tässä vaiheessa pysäytät Apache HTTP:n, poistat Pre-fork-moduuliin linkitetyn PHP 7.2
-moduulin käytöstä ja poistat sitten Pre-forkin käytöstä ottaaksesi Event-moduulin välittömästi käyttöön.
Ensin pysäytät Apache HTTP -palvelun:
- sudo systemctl stop apache2
Sitten voit poistaa käytöstä PHP 7.2
-moduulin, joka liittyy Pre-fork-moduuliin:
- sudo a2dismod php7.2
Sitten poistat käytöstä Pre-fork MPM-moduulin:
- sudo a2dismod mpm_prefork
Nyt otat käyttöön Tapahtuma-MPM-moduulin:
- sudo a2enmod mpm_event
Olet vaihtanut MPM:n pre-forkista tapahtumaan ja poistanut PHP 7.2
-moduulin yhteyden PHP:n ja Apache HTTP:n välillä. Seuraavassa vaiheessa asennat php-fpm
-moduulin sekä siihen liittyvät kirjastot ja välitysmoduulit. Määrität Apache HTTP:n niin, että se voi kommunikoida myös PHP:n kanssa.
Vaihe 2 – Apache HTTP:n määrittäminen käyttämään FastCGI-prosessinhallintaa
Tässä vaiheessa olet vaihtanut tapaa, jolla Apache HTTP käsittelee yhteyksiä siirtymällä Pre-fork MPM:stä Eventiin. Olet kuitenkin matkan varrella poistanut käytöstä PHP-moduulin, joka yhdisti Apache HTTP:n mihin tahansa PHP:llä suoritettavaan ohjelmaan.
Tässä vaiheessa asennat PHP-FPM-prosessorin, jotta Apache HTTP pystyy jälleen käsittelemään PHP-ohjelmia. Lisäksi asennat riippuvuuskirjastot ja otat moduulit käyttöön, jotta molemmat voivat tehdä yhteistyötä sujuvasti ja nopeammin kuin ennen.
Asenna ensin php-fpm
. Seuraava komento asentaa PHP-FPM-paketin ja se ottaa automaattisesti käyttöön systemd:hen integroidun php7.2-fpm
-palvelun, joten palvelu käynnistyy käynnistyksen yhteydessä:
- sudo apt install php-fpm
Voidakseen kommunikoida Apache HTTP ja PHP tarvitsevat kirjaston, joka mahdollistaa tämän kapasiteetin. Asennat nyt libapache2-mod-fcgid
, joka pystyy toimimaan rajapintana ohjelmien ja verkkopalvelimien välillä, ja se on spesifinen Apache HTTP:lle. Tämä kommunikointi tapahtuu UNIX socketin kautta.
Asenna tämä kirjasto:
- sudo apt install libapache2-mod-fcgid
Olet asentanut php-fpm
ja libapache2-mod-fcgid
, mutta kumpikaan ei ole vielä käytössä.
Ensin ota käyttöön php-fpm
-moduuli seuraavalla komennolla:
- sudo a2enconf php7.2-fpm
Toiseksi ota käyttöön Apache HTTP:n proxy
-moduuli:
- sudo a2enmod proxy
Kolmanneksi ota käyttöön Apache HTTP:n FastCGI proxy
-moduuli:
- sudo a2enmod proxy_fcgi
Huom: Voit lukea tämän PHP-ohjelmien ja Apache HTTP:n välisen vuorovaikutuksen konfiguraation UNIX-soketin kautta seuraavasti:
- cat /etc/apache2/conf-enabled/php7.2-fpm.conf
Kaikki on nyt kunnossa, joten voit käynnistää Apache HTTP:n. Teet ensin konfiguraatiotarkastuksen:
- sudo apachectl configtest
OutputSyntax OK
Sen jälkeen voit jatkaa Apache HTTP:n uudelleenkäynnistämistä, koska se käynnistettiin automaattisesti FastCGI-kirjaston libapache2-mod-fcgid
asentamisen yhteydessä:
- sudo systemctl restart apache2
Olet asentanut php-fpm
-moduulin, konfiguroinut Apache HTTP:n toimimaan sen kanssa, ottanut käyttöön tarvittavat moduulit FastCGI-protokollan toimimiseksi ja käynnistänyt vastaavat palvelut.
Nyt kun Apache on ottanut käyttöön Event MPM -moduulin ja PHP-FPM on läsnä ja toiminnassa, on aika tarkistaa, että kaikki toimii tarkoituksenmukaisesti.
Vaihe 3 – Konfiguraation tarkistaminen
Tarkistaaksesi, että konfiguraatiomuutokset on otettu käyttöön, suoritat muutamia testejä. Ensimmäisessä tarkistetaan, mitä moniprosessointimoduulia Apache HTTP käyttää. Toisessa tarkistetaan, että PHP käyttää FPM-hallintaa.
Tarkista Apache HTTP -palvelin suorittamalla seuraava komento:
- sudo apachectl -M | grep 'mpm'
Tulosteesi on seuraava:
Outputmpm_event_module (shared)
Voit toistaa saman proxy
-moduulille ja FastCGI:lle:
- sudo apachectl -M | grep 'proxy'
Tuloste näyttää:
Outputproxy_module (shared)proxy_fcgi_module (shared)
Jos haluat nähdä koko moduulien luettelon, voit poistaa komennon toisen osan -M
jälkeen.
On nyt aika tarkistaa, käyttääkö PHP FastCGI-prosessinhallintaa. Tätä varten kirjoitat pienen PHP-skriptin, joka näyttää sinulle kaikki PHP:hen liittyvät tiedot.
Käynnistä seuraava komento kirjoittaaksesi tiedoston, jonka nimi on seuraava:
- sudo nano /var/www/your_domain/info.php
Lisää tiedostoon info.php
seuraava sisältö:
<?php phpinfo(); ?>
Käy nyt palvelimesi URL-osoitteessa ja liitä sen loppuun info.php
näin: http://your_domain/info.php
.
Palvelimen API-merkintä on FPM/FastCGI.
Poista info.php
-tiedosto tämän tarkistuksen jälkeen, jotta mitään tietoja palvelimesta ei paljastu julkisuuteen:
- sudo rm /var/www/yourdomain.com/info.php
Olet tarkistanut MPM-moduulin, FastCGI:tä käsittelevien moduulien ja PHP-koodin käsittelyn toimintatilan.
Loppupäätelmä
.