Mod Fcgid
Mod Fcgid es un módulo de apache que le permite comunicarse con una aplicación habilitada para fastcgi. Se puede usar para configurar con apache para ejecutar php sobre fastcgi. Es una alternativa al antiguo mod_fastcgi y tiene algunas diferencias con él.
En esta publicación configuraremos apache con php usando este módulo. También puede configurar apache + php con mod_fastcgi.
Dado que fastcgi mantiene la ejecución de php fuera de apache, somos libres de usar un MPM basado en subprocesos como MPM Worker.
Instalar
Para la configuración necesitamos apache, php (con cgi binario), mod_fcgid, mpm worker. Instálelos directamente desde la línea de comandos.
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
Habilitar mod_fcgid
# sudo a2enmod fcgid
Localizar archivos de configuración
Después de instalar los paquetes necesarios, es hora de configurar mod_fcgid. La configuración se realiza principalmente a través de varios archivos de configuración. Por lo tanto, es importante saber dónde están los archivos de configuración.
El archivo de configuración de apache en ubuntu/debian se encuentra en la siguiente ruta
/etc/apache2/sites-available/default
Para averiguar la ubicación del archivo de configuración de Apache para su distribución, use el 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
Entonces, el archivo de configuración está en /etc/apache2/sites-enabled/000-default .
Configurar Fcgid
Apache necesita configurarse para usar mod_fcgid para procesar todos los archivos ".php" y mod_fcgid necesita saber la ubicación del binario php fastcgi, que es php-cgi ubicado en
/usr/bin/php-cgi
Agregue la siguiente configuración a la sección del directorio raíz en el bloque 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>
Esto le dice a apache que use la secuencia de comandos contenedora para iniciar el proceso fastcgi php-cgi. También le dice a apache que ejecute archivos .php usando el controlador fcgid.
Para controlar la configuración de fcgid como el número máximo de procesos, agregue la configuración relevante fuera del bloque vhost.
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
Esta configuración se aplica al contexto del servidor y, por lo tanto, debe estar fuera de cualquier bloque Vhost.
Guión de envoltura
Ahora, el script contenedor que usa mod_fcgid para iniciar procesos 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
Estamos almacenando el script contenedor en /usr/local/bin/php-fcgid-wrapper pero se puede almacenar en cualquier lugar y la ruta debe mencionarse en la configuración de apache.
Haga que el script contenedor sea ejecutable usando chmod
/usr/local/bin# chmod +x php-fcgid-wrapper
De lo contrario, obtendrá un error en su registro de apache como este
[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
También asegúrese de no usar la configuración "PHP_FCGI_CHILDREN". El binario php-cgi puede bifurcar múltiples procesos secundarios y administrarlos, pero fcgid no pasará más de una solicitud al binario php-cgi a la vez, por lo que no se utilizarán los procesos secundarios. Esto se explica en la documentación
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.
Tampoco puede usar APC con fcgid.