mod_proxy_fcgi
El módulo mod_proxy_fcgi es nuevo y permite que apache se conecte o reenvíe solicitudes a un administrador de procesos fastcgi externo como php fpm. Esto permite una separación completa entre la ejecución de scripts php y Apache.
Anteriormente, teníamos que usar módulos como mod_fcgid y mod_fastcgi, que tenían algunas limitaciones. Mod_fcgid, por ejemplo, no utilizó correctamente la capacidad de gestión de procesos de php-cgi, mientras que mod_fastcgi es un módulo de terceros.
Con la llegada de mod_proxy_fcgi Apache finalmente obtiene la capacidad de hablar claramente con los administradores de procesos fastcgi externos, lo que lo hace más eficiente en la tarea.
La delegación de solicitudes php a servidores fpm externos reduce en gran medida la carga en servidores web como apache, lo que da como resultado una utilización eficiente de los recursos de la máquina y un procesamiento más rápido.
request page.php --> Apache --> Php FPM service --> Php process executes page.php
Junto con todo eso, php fpm puede ejecutar motores de almacenamiento en caché de código de operación como apc de una manera muy estable.
Entonces, en esta publicación, nuestra tarea es configurar apache + php-fpm usando el conector mod_proxy_fcgi.
1. Instalar y configurar Apache
Ubuntu 13.10 ya viene con apache 2.4, por lo que todos los instalables están en el propio repositorio.
Instale Apache si aún no lo ha hecho
$ sudo apt-get install apache2
Habilitar mod_proxy_fcgi
$ sudo a2enmod proxy_fcgi Considering dependency proxy for proxy_fcgi: Enabling module proxy. Enabling module proxy_fcgi. To activate the new configuration, you need to run: service apache2 restart
Reiniciar Apache
$ sudo service apache2 restart
Configurar servidores virtuales
La siguiente tarea es configurar un host virtual para usar el proxy mod fcgi para comunicarse con fpm. Los archivos de configuración de vhost se almacenan en la siguiente ubicación
/etc/apache2/sites-available
Ingrese allí y cree su nuevo archivo de configuración de vhost copiando el archivo 000-default.conf que viene con apache.
$ cd /etc/apache2/sites-available $ sudo cp 000-default.conf mysite.conf $ sudo nano mysite.conf
Ahora es el momento de configurar el host virtual. Así es como configuré el archivo
<VirtualHost *:80> ..... ServerName fpm.localhost ServerAdmin [email protected] DocumentRoot /var/www/mysite ..... ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ..... #Include conf-available/serve-cgi-bin.conf ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/mysite/$1 <Directory "/var/www/mysite"> Order allow,deny Allow from all AllowOverride FileInfo All # New directive needed in Apache 2.4.3: Require all granted </Directory> </VirtualHost>
Las cosas importantes a tener en cuenta son:
1. Nombre del servidor - Este es el dominio o el subdominio de su vhost. En este ejemplo, utilicé fpm.localhost para que al usar ese subdominio en localhost, se use php fpm.
2. Raíz del documento - Esta es la raíz de este host virtual desde donde se servirán los archivos web.
3. Coincidencia de pase de proxy - Esta es la directiva que envía todas las solicitudes de archivos ".php" al servidor fcgi en 127.0.0.1:9000. Aquí es donde se ejecutaría nuestro administrador de procesos php fpm. Más sobre esto en la siguiente sección.
La URL de fcgi debe contener la ruta exacta a la raíz del documento. De lo contrario, diría "Archivo no encontrado" al solicitar archivos.
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/mysite/$1
El primer parámetro es el patrón a emparejar. Por lo tanto, todas las direcciones URL que tienen un ".php" seguido de una barra inclinada de opción y cualquier otra cosa coinciden y la parte coincidente se reenvía al servidor fcgi que se ejecuta en 127.0.0.1:9000.
4. Requerir todo concedido:después de la línea ProxyPassMatch, agregamos una sección con las directivas Require y AllowOverride. Es necesario a partir de Apache 2.4
Guarde el archivo y actívelo con el comando a2ensite, que ahorra el esfuerzo de crear el enlace simbólico en el directorio habilitado para sitios.
$ sudo a2ensite mysite Enabling site mysite. To activate the new configuration, you need to run: service apache2 reload
Ahora recarga la configuración de apache
$ sudo service apache2 reload * Reloading web server apache2
Eso completa la configuración de apache. La otra mitad de la tarea es configurar php fpm para que finalmente pueda funcionar.
2. Configurar Php-FPM (Administrador de procesos FastCGI)
Lo siguiente es configurar php fpm. Instálelo a través de synaptic, si aún no lo ha hecho.
$ sudo apt-get install php5-fpm
Los archivos de configuración para fpm se encuentran en
/etc/php5/fpm
/etc/php5/fpm$ ls conf.d php-fpm.conf php.ini pool.d
El directorio pool.d contiene el archivo de configuración para cada grupo fpm y php-fpm.conf es el archivo de configuración principal. Nuestro único trabajo es configurar un grupo de fpm que se usará con apache o el host virtual específico.
El archivo de configuración de un grupo es bastante grande y hay muchos parámetros que se pueden configurar. Pero en esta publicación solo hablaremos de los campos importantes que deben configurarse para que fpm esté en funcionamiento
; Start a new pool named 'www'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = enlightened group = enlightened ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Set listen(2) backlog. ; Default Value: 128 (-1 on FreeBSD and OpenBSD) ;listen.backlog = 128
Cree un nuevo archivo de configuración copiando el archivo www.conf. Y edite los campos como se explica a continuación.
1. La primera opción es el nombre del grupo. Lo llamamos 'www' aquí. Asígnele el nombre que desee o después del nombre de dominio con el que se va a utilizar. 'tusitio' por ejemplo. De esa manera sería más fácil de recordar.
2. Configure el usuario y el grupo con los que se ejecutará este grupo. Cuando está configurando múltiples sitios/dominios/hosts virtuales en un servidor, siempre querrá configurar cuentas de usuario separadas y el grupo correspondiente para cada uno de ellos. Esta es una medida de seguridad esencial, para que cada grupo tenga privilegios de su propio usuario únicamente.
3. Configure el enchufe de escucha. Este es el socket en el que el proceso maestro fpm escuchará las solicitudes entrantes. Puede ser un zócalo unix o un zócalo tcp. Sin embargo, mod_proxy_fcgi aún no es compatible con los sockets de Unix, por lo que estamos limitados a los sockets de tcp.
Por aquí, su número de puerto 9000 en localhost.
Ahora reinicie fpm
$ sudo service php5-fpm restart
Ahora el nuevo grupo de fpm debería tener efecto. Puede ver el nuevo proceso de grupo en htop, por ejemplo.
3. Probar la configuración
Ahora que apache y php fpm están configurados y configurados, es hora de probar. Ingrese al directorio raíz del documento y cree un archivo php que contenga una llamada a la función phpinfo() y ábralo en su navegador.
La "API del servidor" debe informarse como "FPM/FastCGI".
Ahora que apache y php están configurados, es posible que desee instalar otras cosas como APC, la base de datos mariadb, phpmyadmin, etc. Muévase por este sitio para encontrar guías prácticas sobre estos.
Recursos
Consulte los siguientes enlaces para obtener más información
https://wiki.apache.org/httpd/PHP-FPM