PHP-FPM med OPcache og Apache MPM event

Vi vil snart endre PHP fra dagens oppsett med mod_php/mod_ruid2 til PHP-FPM med OPcache, samt endre Apache fra MPM prefork til MPM event. Som resultat blir dine nettsider enda sikrere og raskere.

# På serveren tempo.minhost.no utfører vi endringene lørdag 2. september mellom klokken 03:00 og 07:00.

# På serveren lynet.minhost.no utfører vi endringene søndag 3. september mellom klokken 03:00 og 07:00.

Støtte for php_flag og php_value i .htaccess fjernes

Med PHP-FPM vil det ikke lenger være støtte for å endre PHP-innstillinger via php_flag og php_value i .htaccess, og dem som har benyttet dette må fjerne det innen omlegging til PHP-FPM, hvis ikke vil det medføre feilmelding på nettsidene.

Vi kommer til å skanne serverene etter kunder som har php_flag og php_value i .htaccess, og forsøke å avdekke og fjerne det der det er nødvendig. I tilfeller hvor vi fjerner dette i .htaccess, vil vi varsle den enkelte om det.

Dersom du har php_flag eller php_value i .htaccess som omsluttes av «IfModule», er det ikke nødvendig å fjerne dette, fordi koden da kun benyttes dersom det er en server med oppsett som støtter dette.

PHP-FPM og Apache MPM event

PHP-FPM (FastCGI Process Manager) har vært endel av den offisielle PHP-distribusjonen helt siden PHP versjon 5.3.3, og er i dag en stabil og sikker måte å kjøre PHP på. Med PHP-FPM får hvert eneste domene sin egen PHP-server, noe som øker sikkerheten på kjøring av PHP-kode, samt avlaster Apache.

Vårt forrige oppsett med mod_php/mod_ruid2 medførte at vi måtte kjøre Apache med MPM prefork, som er noe utdatert, og som har veldig dårlig støtte for http/2. Når vi går over til PHP-FPM kan vi omsider kjøre Apache med MPM event. MPM event er mer moderne, og har god støtte for http/2, slik at vi kan tilby støtte for http/2 i nær fremtid.

For å sikre god ytelse har vi valgt å kjøre PHP-FPM i «dynamic»-modus, det er uvanlig på «shared hosting» hvor det oftest benyttes «ondemand»-modus, fordi med dynamic forhåndslastes én eller flere «PHP servere» på samtlige domener, selv for domener som ikke har mottatt trafikk, som bare sitter å venter på å bli brukt – dette bruker mer RAM men gir bedre ytelse.

Raskere PHP med OPcache

PHP-FPM har god støtte for OPcache, som vi samtidig tar i bruk. OPcache cacher kjøring av dine PHP-skript, slik at dine PHP-sider blir raskere. Slik er vårt oppsett:

OPcache har en øvre grense på caching av én million PHP-skript, dette benytter vi til det fulle ved å settte maksgrensen til nettopp én million PHP-skript, i kombinasjon ved at vi avsetter 32 GB RAM kun til OPcache. Dette vil medføre at alle aktive nettsider hos oss burde få cachet sine PHP-skript i OPcache.

Når du gjør endringer i dine PHP-skript, blir det ingen forsinkelse og endringene blir synlig umiddelbart, selv om dine PHP-skript er cachet. Dette får vi til ved å sette OPcache til å sjekke sist modifisert dato på dine PHP-skript ved hver eneste kjøring, dersom ditt PHP-skript er endret siden sist kjøring, blir ikke cachet versjon kjørt, men ny versjon cachet og kjørt i stedet.

Videre utfordring er at hver gang PHP-FPM eller Apache restartes, så tømmes all OPcache fra RAM, og da vil førstemann som besøker dine sider ikke få cachet versjon av dine PHP-skript. Det er et problem for ytelsen fordi det vil skje flere ganger i døgnet. Derfor har vi satt OPcache opp med en «second level» cache på SSD-diskene våre.

Du vil etter omlegging se at du har fått en ny mappe på plasseringen /home/bruker/.opcache – vi ber om at du aldri sletter eller gjør endringer innenfor den plasseringen. Dette ekstra cache-nivået utenfor RAM fungerer slik:

Første gang ditt PHP-skript kjøres caches det både i RAM og på disk i mappa «.opcache», når PHP-FPM eller Apache restartes tømmes all cache fra RAM, men innholdet i .opcache-mappa blir ikke tømt, neste kjøring av et PHP-skript som da ikke er cachet i RAM, vil skje ved at cachet utgave av skriptet i .opcache-mappa på disk blir brukt, mens ved neste kjøring igjen, vil skriptet også være cachet i RAM, og da kjøres direkte fra RAM.

De eneste gangene hvor både OPcache i RAM og på disk blir tømt, er når vi oppgraderer til ny versjon av PHP, da tømmes også cachede filer fra .opcache-mappa på hvert webhotell. Normalt oppgraderer vi PHP til ny versjon én gang i måneden.

Oppsummering

Husk at det ikke lenger kan brukes php_flag i .htaccess. Med PHP-FPM blir kjøring av PHP enda litt sikrere fordi PHP kjøres i separate PHP-servere for hvert domene. Med dynamic-modus og 32 GB OPcache i RAM pluss second level cache på disk som fallback, blir PHP-kjøring enda raskere enn før. Med Apache MPM event kan vi snart tilby støtte for http/2.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *