Fastcgi založený php handler
Mod_fastcgi je modul Apache, který umožňuje Apache komunikovat s aplikacemi podporujícími fastcgi. Lze jej použít ke spouštění php kódu přes fastcgi prostřednictvím binárního souboru php-cgi, který podporuje fastcgi.
Fastcgi má mnoho vylepšení oproti tradičnímu cgi modelu spouštění externích programů na webovém serveru. S fastcgi je několik procesů udržováno naživu a každý proces je znovu použit pro obsluhu více požadavků jeden po druhém. K dispozici jsou nastavení pro řízení maximálního počtu požadavků, které může proces obsloužit, načež se proces ukončí a spustí se nový.
Nainstalujte balíčky
První věc, kterou musíte udělat, je nainstalovat potřebné balíčky ze synaptic. Potřebujeme nainstalovat server apache, mod_fastcgi, mpm worker a php spolu s binárkou cgi. Všimněte si, že pokud již máte nainstalovaný php s mpm prefork a mod-php, bude při instalaci těchto balíčků odstraněn
$ sudo apt-get install apache2 libapache2-mod-fastcgi apache2-mpm-worker php5 php5-cgi
Na ubuntu konfigurační soubor Apache umístěný na
/etc/apache2/sites-enabled/000-default
Binární soubor php cgi se nachází v /usr/bin/php-cgi.
Konfigurace fastcgi
Po instalaci balíčků je čas nakonfigurovat apache tak, aby používal mod_fastcgi ke spouštění php skriptů. Stejně jako cgi bude i fastcgi spouštět procesy php pomocí binárního souboru php-cgi.
Nejprve povolte modul fastcgi pomocí příkazu a2enmod
$ sudo a2enmod fastcgi
Příkaz a2enmod zkopíruje konfigurační soubor modulu z /etc/apache2/mods-available do adresáře /etc/apache2/mods-enabled . Konfigurační soubor je v tomto případě fastcgi.conf. Vypadá to takto
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi </IfModule>
Mod_fastcgi registruje handler s názvem fastcgi-script s apache. To lze použít k určení, které programy se mají spustit prostřednictvím mod_fastcgi.
Dobře, pojďme dál. Další věcí je nakonfigurovat příslušný vhost pro spouštění php pomocí obslužného programu fastcgi. Vložte následující konfiguraci do požadovaného bloku vhost v konfiguračním souboru Apache.
<Ifmodule mod_fastcgi.c> FastCgiServer /usr/local/bin/php-fastcgi-wrapper -processes 10 -restart-delay 1 -init-start-delay 1 -pass-header HTTP_AUTHORIZATION Alias /binary /usr/local/bin <Location /binary/php-fastcgi-wrapper> Options ExecCGI SetHandler fastcgi-script </Location> AddHandler php-fastcgi .php Action php-fastcgi /binary/php-fastcgi-wrapper </IfModule>
FastCgiServer registruje /usr/local/bin/php-fastcgi-wrapper jako aplikace fastcgi s různými možnostmi.
Všimněte si, že toto je skript shellu, který spustí binární soubor php-cgi s různými nastaveními. Všimněte si, že jsme požádali FastCgiServer o vytvoření a správu 10 procesů.
Řádek AddHandler deklaruje nový handler pro soubory ".php" s názvem php-fastcgi. Toto lze pojmenovat podle libosti.
Řádek Action říká apache, aby zpracoval soubor php-fastcgi pomocí programu cgi /cgi-bin/php-fastcgi-wrapper.
Nyní umístění /cgi-bin/php-fastcgi-wrapper není skutečné. Aby ukazoval na skutečné umístění wrapper skriptu, používá se direktiva Alias. Ukazuje /cgi-bin na /usr/local/bin.
Wrapper skript
Nyní přichází obalový skript, který bude fastcgi používat ke spuštění php.
#!/bin/sh # Set desired PHP_FCGI_* environment variables. # Example: # PHP FastCGI processes exit after 500 requests by default. PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS PHP_FCGI_CHILDREN=5 export PHP_FCGI_CHILDREN # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
Všimněte si nastavení PHP_FCGI_CHILDREN. Specifikuje, že každý php proces by měl dále rozvětvovat a spravovat 5 dalších podřízených php procesů. Takže dříve bylo fastcgi řečeno, aby vytvořilo 10 procesů. Celkem je 10*5 =50 procesů. Probíhají 2 úrovně procesního řízení. Mod_fastcgi spravuje 10 php procesů a každý php proces dále spravuje 5 procesů.
Tento soubor je uložen na následující cestě
/usr/local/bin/php-fastcgi-wrapper
Ujistěte se, že soubor je spustitelný. Udělejte na něm chmod
/usr/local/bin# chmod +x php-fastcgi-wrapper
Na umístění souboru nezáleží. Skript wrapper je nezbytný, aby bylo možné do procesu php předat různé možnosti jako PHP_FCGI_MAX_REQUESTS.
Nyní restartujte apache a otestujte nastavení otevřením php skriptu v prohlížeči. Zobrazte obsah proměnné $_SERVER v php. Mělo by obsahovat [FCGI_ROLE] => RESPONDER . To znamená, že fastcgi je v akci.
Zkontrolujte také tabulku procesů pomocí htop nebo System Monitor. Měli byste vidět 50 spuštěných procesů php-cgi.
Zdroj
http://www.fastcgi.com/drupal/node/25
http://www.opensource.apple.com/source/apache_mod_php/apache_mod_php-12/php/sapi/cgi/README.FastCGI