Mod Fcgid
Mod Fcgid je modul Apache, který mu umožňuje komunikovat s aplikací podporující fastcgi. Lze jej použít k nastavení pomocí Apache ke spuštění php přes fastcgi. Je to alternativa ke staršímu mod_fastcgi a má s ním určité rozdíly.
V tomto příspěvku nastavíme apache s php pomocí tohoto modulu. Můžete také nastavit apache + php pomocí mod_fastcgi.
Protože fastcgi udržuje spouštění php mimo Apache, můžeme volně používat mpm založené na vláknech jako mpm worker.
Instalovat
Pro nastavení potřebujeme apache, php (s cgi binárním), mod_fcgid, mpm worker. Nainstalujte je přímo z příkazového řádku.
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
Povolit mod_fcgid
# sudo a2enmod fcgid
Najděte konfigurační soubory
Po instalaci potřebných balíčků je čas nakonfigurovat mod_fcgid. Konfigurace se většinou provádí pomocí různých konfiguračních souborů. Proto je důležité vědět, kde jsou konfigurační soubory.
Konfigurační soubor Apache na ubuntu/debian je umístěn na následující cestě
/etc/apache2/sites-available/default
Chcete-li zjistit umístění konfiguračního souboru apache pro vaši distribuci, použijte příkaz apache2/httpd/apachectl.
# apachectl -S apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:80 is a NameVirtualHost default server 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) port 80 namevhost 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) Syntax OK
Konfigurační soubor je tedy na adrese /etc/apache2/sites-enabled/000-default .
Nakonfigurujte Fcgid
Apache musí být nakonfigurován tak, aby používal mod_fcgid ke zpracování všech souborů ".php" a mod_fcgid je třeba sdělit umístění binárního souboru php fastcgi, což je php-cgi umístěné na
/usr/bin/php-cgi
Přidejte následující konfiguraci do sekce kořenového adresáře v bloku vhost
<Ifmodule mod_fcgid.c> # FCGID registers a handler named fcgid-script AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /usr/local/bin/php-fcgid-wrapper </IfModule>
To říká Apache, aby použil obalový skript ke spuštění procesu fastcgi php-cgi. Také říká Apache, aby spouštěl soubory .php pomocí manipulátoru fcgid.
Chcete-li ovládat nastavení fcgid, jako je maximální počet procesů, přidejte příslušná nastavení mimo blok vhost.
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
Tato nastavení platí pro kontext serveru, a proto musí být mimo jakýkoli blok Vhost.
Wrapper skript
Nyní obalový skript, který používá mod_fcgid ke spouštění procesů php-cgi.
#!/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 # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
Skript obalu ukládáme na adrese /usr/local/bin/php-fcgid-wrapper ale může být uložen kdekoli a cesta musí být uvedena v konfiguraci Apache.
Udělejte obalový skript spustitelný pomocí chmod
/usr/local/bin# chmod +x php-fcgid-wrapper
V opačném případě se ve vašem protokolu Apache zobrazí chyba, jako je tato
[Tue Jun 11 02:53:20 2013] [warn] [client 127.0.0.1] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server [Tue Jun 11 02:53:20 2013] [error] [client 127.0.0.1] Premature end of script headers: server.php
Také se ujistěte, že nepoužíváte nastavení „PHP_FCGI_CHILDREN“. Binární soubor php-cgi může rozdělit více podřízených procesů a spravovat je, ale fcgid nepředá více než jeden požadavek na binární soubor php-cgi najednou, a proto se nebudou používat podřízené procesy. To je vysvětleno v dokumentaci
PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled. The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.
Také nemůžete používat APC s fcgid.