Mod Fcgid
Mod Fcgid è un modulo apache che gli consente di parlare con l'applicazione abilitata fastcgi. Può essere utilizzato per configurare con apache l'esecuzione di php su fastcgi. È un'alternativa al vecchio mod_fastcgi e presenta alcune differenze.
In questo post configureremo apache con php usando questo modulo. Puoi anche configurare apache + php con mod_fastcgi.
Poiché fastcgi mantiene l'esecuzione di php fuori da Apache, siamo liberi di utilizzare un mpm basato su thread come mpm worker.
Installa
Per l'installazione abbiamo bisogno di apache, php (con cgi binary), mod_fcgid, mpm worker. Installali subito dalla riga di comando.
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
Abilita mod_fcgid
# sudo a2enmod fcgid
Individuare i file di configurazione
Dopo aver installato i pacchetti necessari, è il momento di configurare mod_fcgid. La configurazione viene eseguita principalmente tramite vari file di configurazione. Pertanto è importante sapere dove si trovano i file di configurazione.
Il file di configurazione di apache su ubuntu/debian si trova nel seguente percorso
/etc/apache2/sites-available/default
Per scoprire la posizione del file di configurazione di Apache per la tua distribuzione, usa il comando 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
Quindi il file di configurazione si trova in /etc/apache2/sites-enabled/000-default .
Configura Fcgid
Apache deve essere configurato per utilizzare mod_fcgid per elaborare tutti i file ".php" e a mod_fcgid deve essere detto il percorso del binario php fastcgi, che è php-cgi situato in
/usr/bin/php-cgi
Aggiungi la seguente configurazione alla sezione della directory principale nel blocco 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>
Questo dice ad Apache di usare lo script wrapper per avviare il processo fastcgi php-cgi. Dice anche ad Apache di eseguire file .php usando il gestore fcgid.
Per controllare le impostazioni fcgid come il numero massimo di processi, aggiungi le impostazioni pertinenti al di fuori del blocco vhost.
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
Queste impostazioni si applicano al contesto del server e quindi devono essere esterne a qualsiasi blocco Vhost.
Script wrapper
Ora lo script wrapper utilizzato da mod_fcgid per avviare i processi 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
Stiamo archiviando lo script wrapper in /usr/local/bin/php-fcgid-wrapper ma può essere archiviato ovunque e il percorso deve essere menzionato nella configurazione di apache.
Rendi eseguibile lo script wrapper usando chmod
/usr/local/bin# chmod +x php-fcgid-wrapper
Altrimenti viene visualizzato un errore nel registro di apache come questo
[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
Assicurati inoltre di non utilizzare l'impostazione "PHP_FCGI_CHILDREN". Il binario php-cgi può sborsare più processi figlio e gestirli, ma fcgid non passerà più di una singola richiesta al binario php-cgi alla volta, quindi i processi figlio non verranno utilizzati. Questo è spiegato nella documentazione
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.
Inoltre non puoi usare APC con fcgid.