HowTo: Apache con php-fpm y mod-fastcgi bajo Debian


Instalación de Apache del servidor de Web con PHP-FPM y mod_fastcgi bajo Debian Wheezy. Así funciona el Setup …

PHP-fpm está en boca de todos actualmente y todos hablan de Nginx el servidor y de Performance Boost perentorio. Pero también Apache puede usar PHP-FPM. Ahora no quiero difamar Nginx. Él funciona realmente bien y muy rápidamente, sin embargo esto se necesita según la solicitud pocos tiempos, que en la configuración einliest. De Apache „Good Old“, en cambio, es muy extendido y los máximos administradores Linux están familiarizados con él. Por eso, quisiera también mostrar el Setup de php-fpm con Apache y FastCGI. En alrededores mayores el Setup debe ser recomendado en todo caso, dado que es más rápido después de primeros Benchmarks alrededor de algo que Apache con mod-php. Además se puede usar en adelante.htaccess ficheros que es muy razonable precisamente en Shared Hosting alrededores para clientes.
PHP FPM es tan particularmente porque esto corre como el servicio independiente, sin que un servidor de Web sea necesario para ello. Un servidor de Web, si ahora Apache o Nginx, transmite via FastCGI el acta todos los PHP Requests en el servidor PHP-FPM que oye en TCP o Unix Socket. Es también la gran ventaja, como bajo el estándar el Setup LAMP con Apache + mod_php una instancia PHP propia es abierta para cada Request y es cerrada a continuación de nuevo. Además, en PHP-FPM varias piscinas llamadas que pueden ser exportadas con usuarios diferentes pueden ser definidas.

(opcionalmente: Instalación de la versión PHP más actual)

Básicamente podéis usar la versión PHP de Debian Repositories, en efecto, son muy viejos ello. Quién quisiera usar PHP5.5 actuales bajo Debian, éste puede instalar con Dotdeb Mirrors que os sugiero debido a la velocidad en todo caso. (El paso opcionalmente)
Para añadir dotdeb Mirror se hace/etc/sources.list …
vi /etc/apt/sources.list
… y alrededor de dos inscripciones siguientes amplía:
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
A continuación es bajado todavía de GnuPG key y es importado.
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg && rm dotdeb.gpg
Ahora una actualización apt-get actualiza las listas de paquetes (en este paso aún no es instalado)
apt-get update

Instalación de Apache con php-fpm y fastcgi

Como Apache Worker el proceso es usado mpm-worker. Prefork es inadecuado en el caso. Además es instalado mod_fastcgi y PHP Framework. Ahora la instalación es llevada a cabo con siguiente apt-get install la orden:
apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm
El módulo fastcgi es cargado automáticamente, en efecto, el módulo tiene que todavía ser activado „actions“ Apache:
a2enmod actions
La instalación verdadera está acabada con eso. Ahora todavía la lengua PHP tiene que ser enseñada Apachen. Con eso la configuración es editada Apache.
vi /etc/apache2/sites-available/default
Ahora inscripciones siguientes son añadidas en <VirtualHost …> la parte:
AddHandler php5-fcgi .php
Action php5-fcgi /php5.fcgi
Alias /php5-fcgi /var/www/php5-fcgi
FastCgiExternalServer /var/www/php5.fcgi -socket /var/run/php5-fpm.sock
Virtual Host completo la inscripción puede tener aspecto en acaso como aquí:
<VirtualHost *:80>
AddHandler php5-fcgi .php
Action php5-fcgi /php5.fcgi
Alias /php5-fcgi /var/www/sysadminslife.com/php5-fcgi
FastCgiExternalServer /var/www/sysadminslife.com/php5.fcgi -socket /var/run/php5-fpm.sock
ServerAdmin admin@sysadminslife.com
ServerName www.sysadminslife.com
ServerAlias sysadminslife.com
DocumentRoot /var/www/sysadminslife.com/
ErrorLog /var/log/apache2/sysadminslife.com_error.log
CustomLog /var/log/apache2/sysadminslife.com.log combined
<Directory /var/www/sysadminslife.com>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
En el segundo paso es editado php fpm el fichero de configuración …
vi /etc/php5/fpm/pool.d/www.conf
… y puntos siguientes de modo añadido y respectivamente auskommentiert (el punto y coma enfernen):
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
Después del cambio el proceso debía ser lanzado de nuevo de PHP-FPM
/etc/init.d/php5-fpm restart
Para probar ahora la instalación un fichero test.php es colocado simplemente en el servidor de Web la lista y es llamado en el navegador:
vi /var/www/test.php
Como contenido dejamos phpinfo distribuir:
<?php phpinfo(); ?>
Un llamamiento de IP y respectivamente Hostnames (zB: http://192.168.1.100 / test.php) el gasto siguiente debía tener preparado:

PHP-FPM A Idle Timeout aumentan

Puede suceder que en Error de la borda el aviso de error siguiente aparece:
[Fri Apr 25 10:18:23 2014] [error] [client xxx.xxx.xxx.xxx] FastCGI: comm with server "/var/www/php5.fcgi" aborted: idle timeout (30 sec)
[Fri Apr 25 10:18:23 2014] [error] [client xxx.xxx.xxx.xxx] FastCGI: incomplete headers (0 bytes) received from server "/var/www/php5.fcgi"
En este caso esto debía ser aumentado idle Timeout en la línea „FastCgiExternalServer“ (el estándar: 30 segundos):
FastCgiExternalServer /var/www/php5.fcgi -idle-timeout 250 -socket /var/run/php5-fpm.sock

WordPress y Apache + php-fpm + mod-fastcgi – problemas con mod_rewrite

Si empleáis WordPress al sistema en vuestro Setup y usáis este Urls hermoso Permalinks, tiene que ser ampliado.htaccess que es engendrado en RewriteCond:
Sin embargo el aviso de error siguiente aparecerá en Apache Error la borda: Request exceeded el límite the of 10 internal redirects due to probable configuration error. Use‚ el LimitInternalRecursion‘ to increase el límite the if necessary. Use‚ LogLevel del debug‘ to get a backtrace. 
La inscripción tiene aspecto como sigue y debe antes de últimos RewriteRule. / index.php [L] son incorporados:
RewriteCond %{REQUEST_URI} !^/php5.fcgi
El contenido.htaccess solllte tienen aspecto luego como sigue:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/php5.fcgi
RewriteRule . /index.php [L]
</IfModule>
# END WordPress