He leído muchos tutoriales sobre como instalar nginx
y php-fpm
.
Sigo usando apache2 más que nada debido por la facilidad del archivo .htaccess
que permite hacer uso de mod_rewrite y proteger las rutas con un password (así como usar otros módulos como mod_svn
, etc)
No he encontrado una manera 100% transparente como ngninx
, pero detallo lo que uso para trabajar con php-fpm
y apache2
. Pasos en debian:
echo "deb http://packages.dotdeb.org stable all" >> /etc/apt/sources.list
apt-get update
apt-get install libapache2-mod-fastcgi apache2-mpm-worker php5-fpm php5-common php5-cli
- hacer todo los
apt-get
de todos los módulosphp5-*
que quieras - Agregar lo siguiente a un nuevo archivo:
/etc/apache2/mods-enabled/fpm.load
AddType application/x-httpd-fastphp5 .php .phtml Action application/x-httpd-fastphp5 /fast-cgi-fake-handler
- en
/etc/php5/fpm/pool.d/www.conf
cambiar:listen = 127.0.0.1:9000
por:
; listen = 127.0.0.1:9000 listen = /var/run/php-fpm.socket
Esto habilitará el socket de unix que debe ser más eficiente
/etc/init.d/php-fpm restart
/etc/init.d/apache2 restart
Con esto podrás usar php-fpm a través de una url “ficticia”: /fast-cgi-fake-handler
si quieres cambiar tu archivo /etc/apache2/sites-enabled/000-default
se vería de esta manera:
FastCGIExternalServer /var/www/fast-cgi-fake-handler -socket /var/run/php-fpm.socket DocumentRoot /var/www
El sistema cambiará la url /index.php
por: /fast-cgi-fake-handler/index.php
que será enviada a php-fpm mediante fastcgi
Esto tiene dos problemas:
- Necesitas especificar
FastCGIExternalServer
de la forma${DOCUMENT_ROOT}/fast-cgi-fake-handler
en todos tus hosts virtuales para que funcione - Zend framework y otros que utilicen el patron de consumir cualquier url y pasársela a un script
index.php
no funcionarán porque generarán un ciclo infinito; pero hay una solución sencilla en tu código.htaccess
escribe después deRewriteEngine On
:RewriteRule ^fast-cgi-fake-handler/ - [L,NC]
Esto evitará procesar todas las ligas que contengan “
fast-cgi-fake-handler
” como su inicio; o claro puedes usarRewriteCond
para evitar esto.