#1 nick: Mělo by to jít direktivou
DefaultInitEnv PHPRC "/etc/php5/cgi"
BTW: místo libapache2-mod-fastcgi doporučuji nainstalovat libapache2-mod-fcgid, který funguje stejně ale má lepší správu prostředků.
V minulém článku o propojení Apache a PHP jsme dospěli k závěru, že běh interpretu PHP jako FastCGI aplikace je nejlepší možná volba. Dnes se podíváme, jak na to.
Uvedený postup je pro distribuci Ubuntu.
Nainstalujeme balíky php5-cgi a libapache2-mod-fastcgi.
Otevřeme si s právy pro zápis nastavení výchozího VirtualHostu:
gksu gedit /etc/apache2/sites-available/default &
Povolíme podporu pro Actions:
cd /etc/apache2/mods-enabled/ sudo ln -s ../mods-available/actions.load ./ sudo ln -s ../mods-available/actions.conf ./
V otevřeném souboru default někam do kontejneru <VirtualHost> přidáme:
AddType application/fast-php .php Action application/fast-php /cgi-bin/php5
V kontejneru VirtualHost by měl být kontejner <Directory "/usr/lib/cgi-bin">, do něj přidáme:
SetHandler fastcgi-script
Celý kontejner i s předchozím řádkem tedy bude vypada nějak takto:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> SetHandler fastcgi-script AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
Výsledek FastCGI je sice lepší než CGI, ale za mod_php výkonnostně velmi pokulhává.
metoda | datazů za s |
---|---|
CGI | 38 |
FastCGI | 116 |
Modul | 382 |
Metodika testu: simulace 30 uživatelů a 10000 dotazů celkem pomocí nástroje Apache Bench.
Naštěstí není nijak složité výkon FastCGI podstatně zvýšit. Staší nevolat binárku PHP-CGI přímo, ale pomocí upraveného CGI skriptu, který trochu změní nastavení prostředí.
Otevřeme nový CGI skript:
gksu gedit /usr/lib/cgi-bin/php-fast
A zapíšeme do něj:
#!/bin/sh PHP_FCGI_CHILDREN=4 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_MAX_REQUESTS exec /usr/bin/php-cgi
Upravíme práva skriptu:
sudo chmod 755 /usr/lib/cgi-bin/php-fast
A nakonec změníme akci v default:
Action application/fast-php /cgi-bin/php-fast
Před kontejner VirtualHost ještě přidáme:
FastCgiConfig -autoUpdate
Nyní nám beží FastCGI v dynamickém režimu, kdy se počet procesů mění podle toho, jak je potřeba. PHP můžeme spouštět i ve statickém režimu, kdy si sami navolíme, kolik procesů bude předpřipraveno.
FastCgiServer /usr/lib/cgi-bin/php-fast -idle-timeout 120 -processes 5
Výsledek testu po úpravách je už mnohem příjemnější. FastCGI zaostává za modulem jen o pár procent.
metoda | datazů za s |
---|---|
Modul | 382 |
static FastCGI | 333 |
dynamic FastCGI | 323 |
A když trochu změníme parametry testu (100 uživatelů a 10000 dotazů celkem) máme nového vítěze:
metoda | datazů za s |
---|---|
dynamic FastCGI | 337 |
static FastCGI s 5 procesy | 328 |
static FastCGI s 10 procesy | 320 |
Modul | 308 |
#1 nick: Mělo by to jít direktivou
DefaultInitEnv PHPRC "/etc/php5/cgi"
BTW: místo libapache2-mod-fastcgi doporučuji nainstalovat libapache2-mod-fcgid, který funguje stejně ale má lepší správu prostředků.
Nevíte kde sehnat obdobný postup pro Windows XP?
Apache,PHP, FastCGI pod Windows?
Díky za srovnání.
Výborně, našel jsem tu přesně to co jsem tu hledal.
Akorát bych se zeptal, dá se nějak pro různé
virtualhosty dát různé php.ini? (při této konfiguraci)
(Pokud ano, odpovězte mi prosím na email nick519@seznam.cz, díky)