Intentando confirmar si php7.0-fpm funciona con Apache en Ubuntu 16.04

Intentando confirmar si php7.0-fpm funciona con Apache en Ubuntu 16.04

Configuré php7.0-fpm para que funcione con Apache en Ubuntu 16.04 pero no estoy seguro de si está configurado correctamente y funcionando.

Según tengo entendido, después de la instalación y configuración, la salida del archivo de información php debería mostrar "API del servidor --> FPM/FastCGI", pero todavía muestra "API del servidor --> Controlador Apache 2.0".

Así es como instalé y configuré php7.0-fpm:

sudo apt-get install libapache2-mod-fastcgi php7.0-fpm

sudo a2enmod actions fastcgi alias

sudo a2enconf php7.0-fpm

sudo service php7.0-fpm restart

sudo systemctl status php7.0-fpm

sudo systemctl restart apache2.service

A continuación se muestra el resultado de sudo systemctl status php7.0-fpm:

php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-11-25 11:57:33 UTC; 23h ago
Process: 1149 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 1336 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3
Memory: 37.8M
CPU: 3.089s
CGroup: /system.slice/php7.0-fpm.service
├─1336 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─1340 php-fpm: pool www
└─1341 php-fpm: pool www

Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

¿Qué estoy haciendo mal? ¿Agradecería alguna ayuda y consejo?

A continuación se muestra el contenido de mi /etc/apache2/conf-enabled/php7.0-fpm.confarchivo:

<Directory /usr/lib/cgi-bin>
    Require all granted
</Directory>
<IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php 
    Action php7-fcgi /php7-fcgi
    Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
</IfModule>

Respuesta1

Debe habilitar el proxy_fcgimódulo y deshabilitarlo mod_php7para que el php7.0-fpmarchivo de configuración de stock sea efectivo.

Si miras /etc/apache2/conf-enabled/php7.0-fpm.conf, verás esto en la parte superior:

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>

Respuesta2

Logré que esto funcionara sin demasiados problemas siguiendo las instrucciones enBlog de desarrollo de Koen Reiniers. Seguí las instrucciones casi exactamente y, con una excepción, señalada en los comentarios de la publicación del blog, funcionó perfectamente. Necesitarámod_fastcgi, así como varios otros módulos. Esta receta le permitirá configurar múltiples vhosts, cada uno de los cuales utiliza una configuración php7 fpm independiente. Tenga en cuenta que a menos quephpinfo()muestra una API de servidor de "FPM/FastCGI", entonces no has dado en el blanco. Esta es la prueba de fuego de que tienes la pila funcionando. Como comprobación, también ejecuté "<?php touch('/tmp/fpmtest');" para verificar que los procesos iniciados para mi vhost se estuvieran ejecutando como el usuario/grupo especificado (así lo estaban).

Esta receta está copiada, con algunas modificaciones, del blog de Koen, y se le debe el crédito por sus instrucciones claras y efectivas.

Con la posible excepción de las estrofas relacionadas con la seguridad, nonodesea habilitar la configuración de Apache paraphp7.0-fpmsi usas esta receta. El único código que debe ejecutarse globalmente es:

<Directory "/usr/lib/cgi-bin">
  Require all granted
</Directory>

Si su configuración de Apache2 permitemod_cgi.centonces esto probablemente ya se haya solucionado en el archivo de configuración predeterminado del módulo. De lo contrario, si este módulo (omod_cgid.c) aún no está habilitado, esto se puede agregar a cualquier archivo conf que se ejecute al iniciar Apache2, aunque, dependiendo del entorno de su servidor, podría ser más seguro agregarlo solo a cada <VirtualHost> para el cual PHP-FPM es activado. Código relacionado con la seguridad dephp7.0-fpm.confTambién podría copiarse en la misma ubicación o habilitarse globalmente.

Esta guía asume que tiene PHP 7.0.* ejecutándose, así como Apache (con hosts virtuales), en un servidor Ubuntu. Además, no intente esto en un entorno de producción sin contar con las copias de seguridad adecuadas.

Primero asegúratephp7.0-fpmestá instalado en su sistema:

$ sudo apt-get install php7.0-fpm

Una vez instalado, inicie el servicio si no lo ha hecho automáticamente y verifique que se esté ejecutando:

$ sudo service php7.0-fpm start && ps aux | grep php-fpm

Para usar PHP-FPM para todos y cada uno de sus hosts virtuales, tendrá que dividirlos en varios grupos de recursos, uno para cada usuario <VirtualHost> independiente, lo que significa que si tiene varios hosts asignados a un usuario, solo tendrá para crear un grupo de recursos para ese usuario.

La ubicación predeterminada para la configuración del grupo para PHP-FPM es:

/etc/php/7.0/fpm/pool.d/

Para crear una nueva configuración para uno de sus usuarios, simplemente cree un nuevo archivo .conf. Usé el nombre de usuario del usuario como nombre del archivo de configuración:

$ sudo vim /etc/php/7.0/fpm/pool.d/username.conf

Y use esto como su configuración (reemplace "nombre de usuario" con el nombre real de su usuario):

[username]
    user = username
    group = username
    listen = /run/php/php7.0-fpm.username.sock
    listen.owner = username
    listen.group = username
    listen.mode = 0666

    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3

Las primeras siete líneas son las más importantes. Asegúrese de que sean los mismos que el usuario de Apache virtualhost. Las últimas cinco líneas son la configuración predeterminada para el administrador de procesos. Déjalos como están por simplicidad, pero puedes cambiarlos a tu gusto. Puede leer más sobre estas configuraciones en el archivo de configuración predeterminado ubicado en:

/etc/php/7.0/fpm/pool.d/www.conf

Lo único que queda es decirle a Apache que use PHP-FPM en lugar de mod_php. Primero, asegúrese de tener habilitados mod_actions y mod_fastcgi:

$ sudo a2enmod actions fastcgi
$ sudo service apache2 restart

Agregue el controlador PHP-FPM fastcgi a Apache. Tendrá que hacer esto para cada usuario que desee que pueda utilizar PHP-FPM. Edite el archivo por vhost para el nombre de usuario, normalmente en:

/etc/apache2/sites-available/username.conf

Agregue lo siguiente en la parte superior:

<IfModule mod_fastcgi.c>
  AddHandler php7-fcgi-username .php
  Action php7-fcgi-username /php7-fcgi-username
  Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
  FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.0-fpm.username.sock -pass-header Authorization
</IfModule>

Nuevamente, reemplace "nombre de usuario" con el nombre real del usuario del vhost.

Debes indicarle a tu vhost que lo use para archivos .php, por lo que en el mismo archivo, pero en la directiva <VirtualHost>, agrega las siguientes líneas:

<IfModule mod_fastcgi.c>
  <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler php7-fcgi-username
  </FilesMatch>
</IfModule>

Reemplace "nombre de usuario" nuevamente con el nombre del usuario de vhost real y guarde el archivo. Esmuy importanteque la directiva SetHandler se incluya con un subconjunto de las etiquetas de contenedor del sistema de archivos condicional de Apache, <Location>, <LocationMatch>, <Files> o <FilesMatch>. Omitir esto hará que se ignore SetHandler. La etiqueta <Directory> aparentemente no es suficiente.

Si desea aprovechar las capacidades de "estado" y "ping" de PHP-FPM y activarlas en su archivo de grupo por vhost en el/etc/php/7.0/fpm/pool.ddirectorio (ver/etc/php/7.0/fpm/pool.d/www.confpara más detalles) necesitarás hacer dos modificaciones adicionales a tu configuración de Apache2. ElAcciónLa directiva en la parte superior del archivo .conf por vhost debe terminar con "virtual", por lo tanto:

Action php7-fcgi-username /php7-fcgi-username virtual

Además, su contenedor SetHandler debe especificar una expresión regular que incluya estos archivos virtuales. Yo uso lo siguiente:

<LocationMatch ".+\.ph(p[3457]?|t|tml)|/(ping|status)$">
    SetHandler ....
</LocationMatch>

Ahora todo lo que queda es dejar que Apache recargue sus archivos de configuración:

$ sudo service apache2 reload

Para ver si sus cambios han tenido efecto, cree un archivo phpinfo.php en el directorio público de su sitio web y visítelo en su navegador:

&lt;?php phpinfo();

La API del servidor que se muestra cerca de la parte superior de la página debería mostrar "FPM/FastCGI".

Para completar el proceso, debes repetir los pasos para cada uno de tus hosts virtuales. Cuando estés completamente seguromod_phpya no se utiliza, puedes desactivarlo a través de:

$ sudo a2dismod php7.0

Hasta que haya hecho esto, Apache seguirá incluyendo un proceso PHP para cada solicitud, lo que significa que el uso de memoria seguirá siendo el mismo y posiblemente sea incluso mayor.

información relacionada