Možnosti spolupráce PHP a Apache

PHP a Apache mohou spolupracovat několika metodami. Každá z nich má své pro a proti. Pojdmě se podívat, co nám která může nabídnout.

PHP jako modul Apache

PHP interpret běží na Linuxu (Debian, Ubuntu, Gentoo) ve výchozím stavu jako modul Apache. To s sebou sice přináší vysoký výkon ale také mnoho nevýhod.

Výhody:

  • Výkon - Tato varianta je velmi rychlá a není ji nutné nijak konfigurovat.

Nevýhody:

  • Bezpečnost - PHP skript je spoušťen se stejnými právy jako samotný Apache, což je špatně.
  • Stabilita - Jelikož je PHP interpret spušťen jako součást Apache, může záškodný PHP skript způsobit pád celého webserveru.
  • Variabilita - Jelikož je PHP interpret svázán s Apachem, nemůže být PHP skript vykonán na jiném stroji než je webserver (rozložení zátěže). Taktéž není možné předpřipravit si několik procesů pro jeden určitý PHP skript (v očekávání záteže).
  • Konfigurace - Aby se projevily změny provedené v php.ini, je nutné restartovat! celý webserver.

Pod jakým uživatelem běží skript zjistíte pomocí funkce get_current_user.

PHP jako CGI

Druhou možností je volat interpreta PHP jako CGI skript. Kvůli svojí rychlosti je ale tato varianta pro vytížené weby nepoužitelná.

Výhody:

  • Bezpečnost - PHP skript je spoušťen pod právy uživatele, kterému patří.
  • Stabilita - PHP interpret je zcela nezávislý a nemůže tedy běh samotného webserveru ohrozit.
  • Konfigurace - Změny provedené v php.ini se ihned projeví ve skriptech.

Nevýhody:

  • Výkon - Tato varianta je zoufale pomalá. Při každém požadavku se musí vytvořit nový proces, což stojí neúnosně mnoho systémových prostředků.

PHP jako FastCGI

FastCGI je nový způsob spolupráce Apache s PHP, přičemž kombinuje výhody obou předchozích variant. Stejně jako u CGI je při požadavku vytvořen nový proces. Ten ale po zpracování požadavku nekončí, nýbrž čeká na další požadavky. Tím se velmi snižuje režie okolo vytváření nových procesů. Výkon se tak velmi blíží výkonu mod_php a často ho i převyšuje.

Výhody:

  • Bezpečnost - PHP skript je spoušťen pod právy uživatele, kterému patří.
  • Stabilita - PHP interpret je zcela nezávislý a nemůže tedy běh samotného webserveru ohrozit.
  • Výkon - FastCGI je velmi rychlé.

Nevýhody:

  • Konfigurace - Změny provedené v php.ini se neprojeví okamžitě jako u CGI. Je nutné reloadovat webserver (což je ale mnohem lepší než ho restartovat jako u mod_php).

Konec keců, jde se testovat

Na každou z uvedených metod bylo posláno 100 uživatelů, kteří dohromady nabouchali 10000 krát F5 na své klávesnici. Zkráceně řečeno:

ab -n 10000 -c 100 http://localhost/info.php

Obsah skriptu, který tak zuřivě chtěli vidět:

<?php
echo get_current_user();
phpinfo();
?>

Zde jsou výsledky jejich snažení:

metoda datazů za s
FastCGI 337
Modul 308
CGI 38

Metoda FastCGI z tohoto testu tedy vychází jako vítěz. Byla schopna každou sekundu obšťastnit 337 nenasytných uživatelů. Jak ji prakticky nakonfigurovat si můžete přečíst v článku PHP jako FastCGI pod Apachem.

Hodnocení

Komentáře

[1] v6ak
2008-11-30 01:41:24

No dobře, to je jeden pohled - rychlost. Neříkám, že to není důležité, ale jsou tu i jiné pohledy. Třeba možnosti PHP. Některé věci AFAIK nejsou možné pokud PHP není jako modul Apache. Někomu to může být jedno, ale je potřeba s tím počítat.

Na tento komentář odpověděl [2] Dundee
[2] Dundee
2008-11-30 05:28:12

#1 v6ak: Mohl bys to trochu upřesnit? Jaké věci? Na nic takového jsem nikdy nenarazil...

[3] LesTR
2008-12-01 09:58:32

Například Http autentizace je imho dostupná jen pokud je php použito jako modul. Teoreticky můžou být i nějaké rozdíly v $_SERVER, ale to nevím jistě.

Další věcí je, že pro promítnutí změny v php.ini imho postačí reload i u modulu.

Na tento komentář odpověděl [4] Dundee
[4] Dundee
2008-12-01 15:02:29

#3 LesTR: HTTB Basic authentizace se dá nastavit přímo v .htaccess, což je IMHO čistší řešení.

JJ, postačí tichý restart (apachectl graceful). O tom jsem do dneška nevěděl.

Komentáře již nelze přidávat