Cómo conectar NGINX a PHP-FPM usando unix o tcp/ip socket

Cómo conectar NGINX a PHP-FPM usando unix o tcp/ip socket

Nginx Web Server (como proxy inverso) sirve a aplicaciones PHP a través del Fastcgi Protocolo (como servidor de aplicaciones de backend). Nginx empleo 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 características adicionales diseñadas para alimentar sitios web o aplicaciones web con carga pesada, pero se puede utilizar para sitios de cualquier tamaño.

No solo lo hace Php-FPM admite la configuración de Fastcgi grupos de recursos, pero también mejora muchos de los Fastcgi internal y aumenta la presentación de informes de errores, la terminación del script y mucho más. Cuenta con demonización de PHP, gestión de procesos, un número dinámico de procesos de los cuales pueden venir las solicitudes, el encabezado de error, el soporte de carga acelerado y más.

Aceptar Fastcgi solicitudes de Nginx, Php-FPM puede escuchar en un TCP/IP enchufe de dominio de socket o unix. La dirección que elija usar es lo que Nginx usa para conectar (solicitudes proxy) a Php-FPM, utilizando el fastcgi_pass directiva.

Esta guía explica cómo configurar Nginx al servidor aplicaciones PHP utilizando Php-FPM. Describe cuándo usar un TCP/IP Socket o unix dominio enchufe para conectarse Nginx a Php-FPM y por qué.

Esta guía supone 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 Lemp Stack PhpMyadmin en Ubuntu 20.04 servidor
  • Cómo instalar Nginx, MySQL/MariadB y PHP en RHEL 8
  • Cómo instalar LEMP en Debian 10 Server

¿Qué debo usar?: Socket de dominio Unix o TCP/IP Socket?

Desastre dominio (o IPC) Los sockets son un medio de comunicación entre procesos (IPC) que permiten un intercambio de datos eficiente entre los procesos que se ejecutan en el mismo sistema operativo mientras TCP/IP (o Dominio de Internet) Los enchufes permiten que los procesos se comuniquen a través de una red.

A diferencia de TCP/IP socket que identifica un servidor por una dirección IP y un puerto (e.gramo 127.0.0.1: 9000), puede vincular un servidor a un socket de dominio UNIX utilizando un archivo de archivo (e.gramo /run/php-fpm/www.calcetín), que es visible en el sistema de archivos.

Un socket de dominio UNIX es un tipo especial de archivo: los permisos de archivo y directorio se aplican a él (como es el caso con cualquier otro tipo de archivo UNIX) y puede usarse para restringir qué procesos en el host pueden leer y escribir en el archivo, (y así comunicarse con el servidor de backend).

De esta manera, un zócalo de dominio UNIX es seguro porque solo los procesos en el host local pueden usarlo. A TCP/IP Socket puede estar expuesto a Internet que presenta un riesgo de seguridad a menos que se implementen medidas de seguridad adicionales, como un firewall.

Es importante destacar que usa un Desastre El enchufe 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 enchufes de dominio UNIX son más rápidos. El principal inconveniente de los enchufes de dominio UNIX es que son menos escalables, solo admiten la comunicación entre procesos dentro del mismo sistema operativo (OS).

¿Dónde puedo configurar la dirección de escucha 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. Se llama al grupo predeterminado www.

La ubicación del archivo de configuración del grupo de recursos depende del camino Php y Php-FPM se instalan en un sistema Linux (ya sea una versión predeterminada/única o múltiples 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 valor predeterminado Php-FPM piscina (www) El archivo de configuración es /etc/php-fpm.D/www.confusión:

Para enumerar todos los archivos de configuración de PHP, use el siguiente comando LS.

# ls /etc /php* 
Enumere todos los archivos de configuración de PHP

En Ubuntu 20.04, Los archivos de configuración de PHP se encuentran en el /etc/php // directorio y el valor predeterminado Php-FPM piscina (www) El archivo de configuración es /etc/php // fpm/piscina.D/www.confusión:

$ ls/etc/php/7.4/ 
Enumere todos los archivos de configuración de PHP en Ubuntu

Configuración de PHP-FPM para escuchar en un enchufe de dominio Unix

Para configurar Php-FPM Para escuchar en un socket de dominio unix, abra su valor predeterminado Php-FPM Archivo de configuración de la piscina, utilizando su editor de texto favorito.

$ sudo vim/etc/php/7.4/fpm/piscina.D/www.conf # ubuntu/Debian o # vim/etc/php-fpm.D/www.conf #centos/rhel/fedora 

Luego busque la Directiva de escuchar y configúrelo en el nombre de ruta del archivo del Socket de 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.

escuchar =/run/php/php7.4-FPM.Sock #Ubuntu/Debian o Listen =/Run/PhP-FPM/www.Calcetín #Centos/Rhel/Fedora 

Si usa un socket de dominio UNIX, también debe establecer los permisos de lectura/escritura apropiados para el archivo, para permitir conexiones desde el servidor web NGINX. Por defecto, NGINX se ejecuta como usuario y grupo nginx en Centos/Rhel/Fedora y datos www en Ubuntu y Debian.

Entonces, encuentre el escuchar.dueño y escuchar.grupo parámetros y establecerlos en consecuencia. Además, configure el modo en 0660 utilizando el escuchar.modo parámetro.

------------- En Debian y Ubuntu ------------- escuchar.propietario = www-data escucha.grupo = www-data escucha.modo = 0660 ------------- En Centos/Rhel y Fedora ------------- escuchar.propietario = Nginx escuchar.grupo = nginx escuchar.modo = 0660 

Tenga en cuenta que si los permisos en el archivo de socket de dominio UNIX no están configurados correctamente, Nginx puede devolver un error de puerta de enlace malo.

Configuración de PHP-FPM

Configuración de PHP-FPM para escuchar en un socket TCP/IP

Aunque un zócalo de dominio UNIX es más rápido que un enchufe TCP/IP, el primero es menos escalable, ya que solo puede admitir la comunicación entre procesos en el mismo sistema operativo. Si Nginx y el servidor de aplicaciones de backend (Php-FPM) se ejecutan en diferentes sistemas, tendrá que configurar Php-FPM para escuchar en un socket TCP/IP para conexiones.

En el Php-FPM Archivo de configuración de la piscina, configure el escuchar dirección de la siguiente manera. Asegúrese de que el puerto que haya elegido no esté siendo utilizado por otro proceso o servicio en el mismo sistema.

escuchar = 127.0.0.1: 3000 
Configuración de PHP-FPM para TCP Socket

Configuración de Nginx para que funcione con el servidor de aplicaciones PHP-FPM

Una vez que haya configurado la dirección Php-FPM escucha, debe configurar Nginx para solicitarle la solicitud a través de esa dirección, utilizando 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/Ejemplo.comunicarse.confusión, Abrirlo para editar.

# vim/etc/nginx/conf.D/Ejemplo.comunicarse.confusión 

Busca el ubicación bloque para el procesamiento .php archivos y establecer 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 o Fastcgi_Pass unix:/run/php-fpm/www.Calcetín #Centos/Rhel/Fedora 
Conecte Nginx a PHP-FPM usando unix Socket

O usar un TCP/IP dirección si configuró Php-FPM escuchar en un TCP/IP enchufe. Si el servidor de aplicaciones de 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 está ejecutando 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 aguas arriba en el /etc/nginx/conf.d/php-fpm.confusión Archivo, dentro de un bloque aguas arriba, con el nombre Php-FPM.

Puede hacer cambios aquí en consecuencia dependiendo de 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 servidor unix:/run/php-fpm/www.calcetín;  
Configurar el servidor PHP Upstream en Nginx

y en el archivo de bloque de servidor de su sitio, simplemente establezca el fastcgi_pass parámetro como se muestra.

fastcgi_pass php-fpm; 
Configurar NGINX en PhP-FPM Upstream Server

Después de hacer cambios en el Php-FPM y Nginx configuraciones, verifique su sintaxis de configuración para la corrección de la siguiente manera.

------------- En Debian y Ubuntu ------------- $ sudo php -fpm -t $ sudo nginx -t ------------- En Centos/Rhel y Fedora ------------- # php -fpm -t # nginx -t 

Mientras que la salida del comando muestra solo el archivo de configuración principal, todos los demás archivos de configuración se incluyen y se verifican también.

Verifique la configuración de NGINX y PHP-FPM

A continuación, debe reiniciar los dos servicios para aplicar los cambios, utilizando el comando SystemCTL.

------------- En Debian y Ubuntu ------------- $ sudo systemctl reiniciar nginx $ sudo systemctl reiniciar PHP7.4-FPM ------------- En Centos/Rhel y Fedora ------------- # SystemCTL reiniciar nginx # systemCTL reiniciar PHP-FPM 

Si obtiene algún error, puede verificar el Nginx y Php-FPM Archivos de registro usando el comando CAT.

------------- En Debian y Ubuntu ------------- $ cat/var/log/nginx/error.log $ cat/var/log/php7.4-FPM.registro ------------- En Centos/Rhel y Fedora ------------- $ cat/var/log/nginx/error.log $ cat/var/log/php-fpm/www-stror.registro 

Eso es todo lo que tuvimos para ti. La sección de comentarios a continuación se puede usar para hacer preguntas. Para obtener más información, consulte la documentación de Nginx y la documentación PHP-FPM.