GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar PHP-FPM con NGINX

PHP-FPM (FastCGI Process Manager) es una alternativa a la implementación FastCGI de PHP con algunas características adicionales útiles para sitios con mucho tráfico. Es el método preferido para procesar páginas PHP con NGINX y es más rápido que los métodos tradicionales basados ​​en CGI como SUPHP o mod_php para ejecutar un script PHP.

La principal ventaja de usar PHP-FPM es que usa una cantidad considerable de menos memoria y CPU en comparación con cualquier otro método para ejecutar PHP. La razón principal es que demoniza a PHP, transformándolo así en un proceso en segundo plano al tiempo que proporciona un script CLI para administrar la solicitud de PHP.

Prerrequisitos de configuración PHP-FPM NGINX

  • Puede abrir una sesión SSH en su sistema Ubuntu 18.04 usando root o un usuario habilitado para sudo.
  • Ya ha instalado NGINX y PHP en su sistema Ubuntu 18.04.

Pasos de configuración PHP-FPM de NGINX

  • Instalar PHP-FPM
  • Configurar grupo PHP-FPM
  • Configurar NGINX para PHP-FPM
  • Probar la configuración PHP-FPM de NGINX

1. Instalar PHP-FPM

Nginx no sabe cómo ejecutar un script PHP propio. Necesita un módulo PHP como PHP-FPM para administrar eficientemente los scripts PHP. PHP-FPM, por otro lado, se ejecuta fuera del entorno NGINX al crear su propio proceso. Por lo tanto, cuando un usuario solicita una página PHP, el servidor nginx pasará la solicitud al servicio PHP-FPM usando FastCGI.

La instalación de php-fpm en Ubuntu 18.04 depende de PHP y su versión. Consulte la documentación de PHP instalado antes de proceder con la instalación de FPM en su servidor. Suponiendo que ya instaló la última versión de PHP 7.3, puede instalar FPM usando el siguiente comando apt-get.


# apt-get install php7.3-fpm

El servicio FPM se iniciará automáticamente, una vez finalizada la instalación. Puede verificar eso usando el siguiente comando systemd:


# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
     Docs: man:php-fpm7.3(8)
 Main PID: 32210 (php-fpm7.3)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 1152)
   CGroup: /system.slice/php7.3-fpm.service
           ├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
           ├─32235 php-fpm: pool www
           └─32236 php-fpm: pool www

2. Configurar grupo PHP-FPM

El servicio php-fpm crea un grupo predeterminado, cuya configuración (www.conf) se puede encontrar en /etc/php/7.3/fpm/pool.d carpeta. Puede personalizar el grupo predeterminado según sus requisitos. Pero es una práctica estándar crear grupos separados para tener un mejor control sobre la asignación de recursos para cada proceso de FPM.

Además, la segregación del grupo de FPM les permitirá ejecutarse de forma independiente mediante la creación de su propio proceso maestro. Eso significa que cada aplicación php se puede configurar con su propia configuración de caché usando PHP-FPM. Un cambio en la configuración de un grupo no requiere que inicie o detenga el resto de los grupos FPM.

Vamos a crear un grupo de FPM para ejecutar una aplicación PHP de manera efectiva a través de un usuario separado. Para empezar, cree un nuevo usuario que tendrá derechos exclusivos sobre este grupo:


# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user

Ahora navegue al directorio de configuración de FPM y cree un archivo de configuración usando su editor de texto favorito como vi:


# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes. 
pm = dynamic 
pm.max_children = 75 
pm.start_servers = 10 
pm.min_spare_servers = 5 
pm.max_spare_servers = 20 
pm.process_idle_timeout = 10s

Las opciones de configuración de FPM anteriores y sus valores se describen a continuación.

  • [sitio_de_wordpress] :el nombre del grupo y debe ser único en todos los nombres de grupos.
  • usuario y grupo :el usuario y el grupo bajo el cual se ejecutará el grupo.
  • escuchar :El nombre del archivo de socket para este grupo.
  • escuchar.propietario y escuchar.grupo :debe coincidir con el usuario y el grupo en el que se ejecuta NGINX. En nuestro caso es www-data.
  • valor_php_admin :Permite establecer valores de configuración de php personalizados.
  • php_admin_flag :Permite establecer banderas booleanas de PHP.
  • pm :La configuración del administrador de procesos y el valor es Dinámico significa que la cantidad de procesos secundarios se establece dinámicamente en función de las siguientes directivas.
  • pm.max_children :El número máximo de niños que pueden estar vivos al mismo tiempo.
  • pm.start_servers :El número de niños creados al inicio.
  • pm.min_spare_servers :El número mínimo de niños en estado 'inactivo' (esperando para procesar). Si el número de procesos inactivos es menor que este número, se crearán algunos hijos.
  • pm.max_spare_servers :El número máximo de niños en estado inactivo (esperando para procesar). Si el número de procesos inactivos es mayor que este número, se eliminarán algunos niños.
  • pm.process_idle_timeout :el número máximo deseado de procesos de servidor inactivos. Se usa solo cuando el valor de pm se establece en dinámico.
  • Además de las configuraciones anteriores, también es posible pasar algunas variables ambientales del sistema al servicio php-fpm usando algo como env['PHP_FOO'] = $bar .

    Por ejemplo, agregar las siguientes opciones en el archivo de configuración anterior establecerá el nombre de host y la ubicación de la carpeta temporal en el entorno PHP.

    
    ...
    ...
    env[HOSTNAME] = $HOSTNAME
    env[TMP] = /tmp
    ...
    ...
    

    Además, la configuración de los administradores de procesos en el archivo de configuración del grupo anterior se establece en dinámica. Elija la configuración que mejor se adapte a sus necesidades.

    Las otras opciones de configuración para el administrador de procesos son:

  • Estático :Se mantendrá un número fijo de procesos PHP.
  • bajo demanda :No se crean hijos al inicio. Los niños se bifurcarán cuando se reciban nuevas solicitudes en el servidor.

Una vez que haya terminado de crear el archivo de configuración anterior, reinicie el servicio fpm para aplicar la nueva configuración:


# systemctl start php7.3-fpm

El grupo de FPM se creará inmediatamente para servir páginas php. Recuerde, puede crear un servicio systemd separado especificando el archivo de configuración de FPM anterior, lo que le permite iniciar/detener este grupo sin afectar a otros grupos.

3. Configurar NGINX para PHP-FPM

Ahora cree un bloque de servidor NGINX que utilizará el grupo FPM anterior. Para hacer eso, edite su archivo de configuración NGINX y pase la ruta del archivo de socket del grupo usando la opción fastcgi_pass dentro del bloque de ubicación para php.


server {
         listen       80;
         server_name  example.journaldev.com;
         root         /var/www/html/wordpress;

         access_log /var/log/nginx/example.journaldev.com-access.log;
         error_log  /var/log/nginx/example.journaldev.com-error.log error;
         index index.html index.htm index.php;

         location / {
                      try_files $uri $uri/ /index.php$is_args$args;
         }

         location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
}

Bloque de servidor NGINX

Asegúrese de que la configuración anterior sea sintácticamente correcta y reinicie NGINX.


# nginx-t
# systemctl restart nginx

4. Pruebe la configuración PHP-FPM NGINX

Para probar si el archivo de configuración NGINX anterior está utilizando el grupo FPM recién creado, cree un archivo de información php dentro de la raíz web. He usado /var/www/html/wordpress como raíz web en el archivo de configuración de NGINX anterior. Ajuste este valor según su entorno.


# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php

Una vez que haya terminado de crear la página de información de PHP, apúntela con su navegador web favorito.

Notará que el valor de $_SERVER['USER'] y $_SERVER['HOME'] la variable apunta a wordpress_user y /home/wordpress_user respectivamente, que configuramos en el archivo de configuración de FPM previamente y, por lo tanto, confirma que NGINX está sirviendo las páginas php utilizando nuestro grupo de FPM deseado.

Pruebas NGINX PHP-FPM

Resumen

En este artículo, aprendimos cómo instalar php-fpm y configurar grupos separados para diferentes usuarios y aplicaciones. También aprendimos cómo configurar un bloque de servidor NGINX para conectarse a un servicio PHP-FPM. PHP-FPM proporciona confiabilidad, seguridad, escalabilidad y velocidad junto con muchas opciones de ajuste de rendimiento. Ahora puede dividir el grupo de PHP-FPM predeterminado en varios grupos de recursos para atender diferentes aplicaciones. ¡Esto no solo mejorará la seguridad de su servidor, sino que también le permitirá asignar los recursos del servidor de manera óptima!


Linux
  1. Cómo configurar Nginx para trabajar con PHP a través de PHP-FPM

  2. Cómo configurar origen Cloudflare SSL con Nginx

  3. ¿Cómo configurar servidores de registro remotos con rsyslog?

  4. Cómo habilitar Nginx con PHP-FPM en Plesk

  5. Cómo instalar PHP-FPM con Apache en Ubuntu 20.04

Cómo instalar WonderCMS en Ubuntu 20.04 (con Nginx)

Cómo configurar Nginx con SSL

Cómo instalar Nginx con PHP-FPM en Debian 11

Cómo configurar NGINX en un servidor CentOS 7

Cómo configurar Load Balancing con NGINX en Jelastic Cloud

Cómo instalar y configurar Memcached con Apache y PHP