NGINX servidor web (como proxy inverso) sirve aplicaciones PHP a través de FastCGI protocolo (como un servidor de aplicaciones back-end). NGINX emplea PHP-FPM (FastCGI Process Manager), una alternativa PHP FastCGI implementación que se ejecuta en segundo plano como un demonio, escuchando CGI peticiones. Viene con funciones adicionales diseñadas para impulsar sitios web o aplicaciones web con mucha carga, pero se puede usar para sitios de cualquier tamaño.
No solo PHP-FPM configuración de soporte de FastCGI grupos de recursos, pero también mejora muchos de los FastCGI internos y aumenta el informe de errores, la terminación de scripts y mucho más. Cuenta con daemonización de PHP, gestión de procesos, número dinámico de procesos de los que pueden provenir solicitudes, encabezado de error, soporte de carga acelerada y más.
Para aceptar FastCGI solicitudes de NGINX , PHP-FPM puede escuchar en un TCP/IP socket o socket de dominio UNIX. Cualquier dirección que elija usar es lo que NGINX utiliza para conectarse (solicitudes de proxy) a PHP-FPM , usando el fastcgi_pass
directiva.
Esta guía explica cómo configurar NGINX al servidor de aplicaciones PHP usando PHP-FPM . Describe cuándo usar un TCP/IP socket o socket de dominio UNIX para conectar NGINX a PHP-FPM y por qué.
Esta guía asume que tienes NGINX y PHP-FPM instalado en su sistema Linux, de lo contrario, consulte:
- Cómo instalar el servidor LEMP en CentOS 8
- Cómo instalar la pila LEMP PhpMyAdmin en el servidor Ubuntu 20.04
- Cómo instalar NGINX, MySQL/MariaDB y PHP en RHEL 8
- Cómo instalar LEMP en el servidor Debian 10
¿Qué debo usar:socket de dominio UNIX o socket TCP/IP?
A diferencia de un TCP/IP socket que identifica un servidor por una dirección IP y un puerto (por ejemplo, 127.0.0.1:9000 ), puede vincular un servidor a un socket de dominio UNIX utilizando un nombre de ruta de archivo (por ejemplo, /run/php-fpm/www.sock ), que es visible en el sistema de archivos.
Un socket de dominio UNIX es un tipo especial de archivo:se le aplican permisos de archivo y directorio (como es el caso con cualquier otro tipo de archivo UNIX) y se puede usar para restringir qué procesos en el host pueden leer y escribir en el archivo, (y así comunicarse con el servidor backend).
De esta forma, un socket de dominio UNIX es seguro porque solo los procesos en el host local pueden usarlo. Un TCP/IP socket puede estar expuesto a Internet, lo que representa un riesgo para la seguridad, a menos que se implementen medidas de seguridad adicionales, como un firewall.
Es importante destacar que el uso de un UNIX socket de dominio no es lo mismo que usar un TCP/IP socket con respecto al rendimiento, varias pruebas y puntos de referencia han demostrado que los sockets de dominio UNIX son más rápidos. El principal inconveniente de los sockets de dominio UNIX es que son menos escalables, solo admiten la comunicación entre procesos dentro del mismo sistema operativo (SO).
¿Dónde puedo configurar la dirección de escucha de PHP-FPM?
Puede configurar la dirección PHP-FPM escucha en un archivo de configuración del grupo de recursos. Tenga en cuenta que con PHP-FPM , puede ejecutar varios grupos de procesos con diferentes configuraciones. El grupo predeterminado se llama www
.
La ubicación del archivo de configuración del grupo de recursos depende de la forma en que PHP y PHP-FPM están instalados en un sistema Linux (ya sea una versión predeterminada/única o varias versiones simultáneamente).
Por ejemplo, en CentOS 8 , con una sola versión, todos los archivos de configuración de PHP se encuentran en el /etc
directorio y el predeterminado PHP-FPM grupo (www)
el archivo de configuración es /etc/php-fpm.d/www.conf :
Para enumerar todos los archivos de configuración de PHP, use el siguiente comando ls.
# ls /etc/php*
Listar todos los archivos de configuración de PHP
En Ubuntu 20.04 , los archivos de configuración de PHP se encuentran en /etc/php/<php-version>/
directorio y el predeterminado PHP-FPM grupo (www)
el archivo de configuración es /etc/php/<php-version>/fpm/pool.d/www.conf
:
$ ls /etc/php/7.4/
Listar todos los archivos de configuración de PHP en Ubuntu
Configuración de PHP-FPM para escuchar en un socket de dominio UNIX
Para configurar PHP-FPM para escuchar en un socket de dominio UNIX, abra su PHP-FPM predeterminado archivo de configuración del grupo, utilizando su editor de texto favorito.
# vim /etc/php-fpm.d/www.conf #Ubuntu/Debian OR $ sudo vim /etc/php/7.4/fpm/pool.d/www.conf #CentOS/RHEL/Fedora
Luego busque la directiva de escucha y configúrela en el nombre de la ruta del archivo del socket del dominio UNIX de la siguiente manera. Tenga en cuenta que la mayoría de las instalaciones utilizan un socket de dominio UNIX de forma predeterminada.
listen = /run/php/php7.4-fpm.sock #Ubuntu/Debian OR listen = /run/php-fpm/www.sock #CentOS/RHEL/Fedora
Si usa un socket de dominio UNIX, también debe configurar los permisos de lectura/escritura apropiados para el archivo, para permitir las conexiones desde el servidor web NGINX. De forma predeterminada, NGINX se ejecuta como usuario y grupo nginx en CentOS/RHEL/Fedora y www-datos en Ubuntu y Debian .
Por lo tanto, busque el listen.owner
y listen.group
parámetros y configurarlos en consecuencia. Además, establezca el modo en 0660 usando el listen.mode
parámetro.
------------- On Debian and Ubuntu ------------- listen.owner = www-data listen.group = www-data listen.mode = 0660 ------------- On CentOS/RHEL and Fedora ------------- listen.owner = nginx listen.group = nginx listen.mode = 0660
Tenga en cuenta que si los permisos en el archivo de socket del dominio UNIX no están configurados correctamente, NGINX puede devolver un error de puerta de enlace incorrecta.
Configuración PHP-FPM
Configurar PHP-FPM para escuchar en un socket TCP/IP
Aunque un socket de dominio UNIX es más rápido que un socket TCP/IP, el primero es menos escalable, ya que solo admite la comunicación entre procesos en el mismo sistema operativo. Si NGINX y el servidor de aplicaciones backend (PHP-FPM ) se ejecutan en diferentes sistemas, deberá configurar PHP-FPM para escuchar en un socket TCP/IP para conexiones.
En el PHP-FPM archivo de configuración del grupo, configure el listen
dirección de la siguiente manera. Asegúrese de que el puerto que ha elegido no esté siendo utilizado por otro proceso o servicio en el mismo sistema.
listen = 127.0.0.1:3000
Configuración de PHP-FPM para socket TCP
Configuración de NGINX para trabajar con el servidor de aplicaciones PHP-FPM
Una vez que haya configurado la dirección PHP-FPM escucha, debe configurar NGINX a la solicitud de proxy a través de esa dirección, usando el fastcgi_pass
parámetro de configuración, en un archivo de configuración de bloque de servidor virtual.
Por ejemplo, si el archivo de configuración de su sitio web es /etc/nginx/conf.d/example.com.conf , ábralo para editarlo.
# vim /etc/nginx/conf.d/example.com.conf
Busque la location
bloque para procesar .php
archivos y configure el fastcgi_pass
parámetro de la siguiente manera, si configuró PHP-FPM para escuchar en un socket de dominio UNIX.
fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian OR fastcgi_pass unix:/run/php-fpm/www.sock #CentOS/RHEL/Fedora
Conecte Nginx a PHP-FPM usando Unix Socket
O usa un TCP/IP dirección si configuró PHP-FPM para escuchar en un TCP/IP enchufe. Si el servidor de aplicaciones backend (PHP-FPM ) se ejecuta en un servidor separado (reemplace 10.42.0.10 con la dirección IP de la máquina en la que se ejecuta el servidor PHP-FPM FastCGI).
fastcgi_pass 10.42.0.10:3000;
Conecte Nginx a PHP-FPM usando TCP Socket
Importante :En CentOS 8 , PHP-FPM se define como un servidor ascendente en /etc/nginx/conf.d/php-fpm.conf archivo, dentro de un bloque ascendente, con el nombre php-fpm .
Puede realizar cambios aquí según la dirección PHP-FPM está configurado para escuchar, en el archivo de configuración del grupo. La configuración predeterminada apunta a un socket de dominio UNIX.
upstream php-fpm { server unix:/run/php-fpm/www.sock; }
Configurar el servidor ascendente de PHP en Nginx
y en el archivo de bloqueo del servidor de su sitio, simplemente configure el fastcgi_pass
parámetro como se muestra.
fastcgi_pass php-fpm;
Configurar Nginx para servidor ascendente PHP-FPM
Después de realizar cambios en PHP-FPM y NGINX configuraciones, verifique su sintaxis de configuración para ver si es correcta de la siguiente manera.
------------- On Debian and Ubuntu ------------- $ sudo php-fpm -t $ sudo nginx -t ------------- On CentOS/RHEL and Fedora ------------- # php-fpm -t # nginx -t
Si bien la salida del comando muestra solo el archivo de configuración principal, todos los demás archivos de configuración también se incluyen y verifican.
Compruebe la configuración de Nginx y PHP-FPM
A continuación, debe reiniciar los dos servicios para aplicar los cambios mediante el comando systemctl.
------------- On Debian and Ubuntu ------------- $ sudo systemctl restart nginx $ sudo systemctl restart php7.4-fpm ------------- On CentOS/RHEL and Fedora ------------- # systemctl restart nginx # systemctl restart php-fpm
Si obtiene algún error, puede consultar el NGINX y PHP-FPM registrar archivos usando el comando cat.
------------- On Debian and Ubuntu ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php7.4-fpm.log ------------- On CentOS/RHEL and Fedora ------------- $ cat /var/log/nginx/error.log $ cat /var/log/php-fpm/www-error.log
Eso es todo lo que teníamos para ti. La sección de comentarios a continuación se puede utilizar para hacer preguntas. Para obtener más información, consulte la documentación de NGINX y la documentación de PHP-FPM.
Compartir es cuidar…Compartir en FacebookCompartir en TwitterCompartir en LinkedinCompartir en Reddit