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

El servidor web NGINX. (como proxy inverso) sirve aplicaciones PHP a través del protocolo FastCGI. (como servidor de aplicaciones backend). NGINX. emplea PHP-FPM. (FastCGI Process Manager), una implementación alternativa de PHP FastCGI. que se ejecuta en segundo plano como un demonio, escuchando Solicitudes CGI. 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.

PHP-FPM. no solo admite la configuración de los grupos de recursos de FastCGI. pero también mejora muchos de los componentes internos de FastCGI. y aumenta los informes de errores, la terminación de secuencias de comandos y mucho más. Cuenta con demonización de PHP, administración de procesos, un número dinámico de procesos de los que pueden provenir las solicitudes, encabezado de error, soporte de carga acelerada y más.

Para aceptar solicitudes FastCGI. de NGINX. PHP-FPM. puede escuchar en un socket TCP/IP. o en un socket de dominio UNIX. Cualquiera que sea la dirección que elija utilizar es la que utiliza NGINX. para conectarse (solicitudes de proxy) a PHP-FPM. utilizando la directiva fastcgi_pass.

Esta guía explica cómo configurar NGINX. para servidor de aplicaciones PHP usando PHP-FPM. Describe cuándo usar un socket TCP/IP. o un socket de dominio UNIX para conectar NGINX. a PHP-FPM. y por qué.

Esta guía asume que tiene NGINX. y PHP-FPM. instalados en su sistema Linux; de lo contrario, consulte:

  • Cómo instalar 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? freestar.config.enabled_slots.push

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

A diferencia de un socket TCP/IP. 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 UNIX El socket de dominio es un tipo especial de archivo: se le aplican permisos de archivo y directorio (como es el caso de 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 r).

De esta manera, un socket de dominio UNIX es seguro porque solo los procesos en el host local pueden usarlo. Un socket TCP/IP. puede estar expuesto a Internet y representar un riesgo de seguridad a menos que se implementen medidas de seguridad adicionales, como un firewall.

Es importante destacar que usar un UNIX. domain socket no es lo mismo que usar un socket TCP/IP. en cuanto al rendimiento, varias pruebas y pruebas de rendimiento 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 PHP-FPM?

Puede configurar la dirección que escucha PHP-FPM. en un archivo de configuración de 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 sistema (ya sea una versión predeterminada/única o varias versiones simultáneamente).

Por ejemplo, en CentOS 8. con una única versión, todos los archivos de configuración de PHP se encuentran en/etc y el archivo de configuración predeterminado del grupo PHP-FPM. (www) es /etc/php-fpm.d/www.conf.

Para enumere todos los archivos de configuración de PHP, use el siguiente comando ls.

# ls/etc/php * Mostrar todos los archivos de configuración PHP  Lista de todos los archivos de configuración PHP Listar todos los archivos de configuración PHP

En Ubuntu 20.04. los archivos de configuración PHP se encuentran en el directorio/etc/php//y el archivo de configuración predeterminado del grupo PHP-FPM. (www) es/etc/php//fpm/pool.d/www.conf:

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

Configuración de PHP-FPM para escuchar en UNIX Socket de dominio

Para configurar PHP-FPM. para escuchar en un socket de dominio UNIX, abra su archivo de configuración de grupo PHP-FPM. predeterminado, usando su texto favorito editor.

$ sudo vim/etc/php/7.4/fpm/pool.d/www.conf # Ubuntu/Debian OR # vim/etc/php-fpm.d/www.conf # CentOS/RHEL/Fedora

Luego busque la directiva listen y configúrela con el nombre de la 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.

listen =/run/php/php7.4-fpm.sock # Ubuntu/Debian O listen =/run/php-fpm/www.sock # CentOS/RHEL/Fedora

Si usa un socket de dominio UNIX, también necesita establecer permisos de lectura/escritura apropiados para el archivo, para permitir conexiones desde el servidor web NGINX. De forma predeterminada, NGINX se ejecuta como usuario y grupo nginx. en CentOS/RHEL/Fedora. y www-data. en Ubuntu. y Debian.

Por lo tanto, busque los parámetros listen.owner y listen.group y configúrelos en consecuencia. Además, configure el modo en 0660. usando el parámetro listen.mode.

————-En Debian y Ubuntu————- listen.owner = www-data listen.group = www-data listen.mode = 0660 ————-En CentOS/RHEL y Fedora————- listen.owner = nginx listen.group = nginx listen.mode = 0660

Tenga en cuenta que si los permisos en el archivo de socket de dominio UNIX son no está configurado correctamente, NGINX puede devolver un error de puerta de enlace incorrecta.

 Configuración PHP-FPM  Configuración de PHP-FPM Configuración PHP-FPM

Configuración de 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, porque solo admite comunicación entre procesos en el mismo sistema operativo. Si NGINX. y el servidor de aplicaciones backend ( PHP-FPM. se ejecutan en sistemas diferentes, tendrá que configurar PHP-FPM. para escuchar un socket TCP/IP para las conexiones.

En el archivo de configuración del grupo PHP-FPM. configure la dirección de escucha 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 PHP-FPM para TCP Socket  Configuración PHP-FPM para TCP Socket Configuración 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 de escucha de PHP-FPM. debe configurar NGINX. para solicitud de proxy a través de esa dirección, utilizando la configuración fastcgi_pass uration, 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 el bloque de ubicación para procesar archivos .php y configure el parámetro fastcgi_pass 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.sock #CentOS/RHEL/Fedora  Conecte Nginx a PHP-FPM usando Unix Socket  Conecte Nginx a PHP-FPM usando Unix Socket Conecte Nginx a PHP-FPM usando Unix Socket

O use una dirección TCP/IP. si configuró PHP-FPM. para escuchar en un socket TCP/IP. Si el servidor de aplicaciones backend ( PHP-FPM. se está ejecutando en un servidor separado (reemplace 10.42.0.10. con la dirección IP de la máquina en la que el servidor PHP-FPM FastCGI Esta corriendo).

fastcgi_pass 10.42.0.10:3000;  Conecte Nginx a PHP-FPM usando TCP Socket  Conectar Nginx a PHP-FPM usando TCP Socket Conectar Nginx a PHP-FPM usando TCP Socket

Importante. en CentOS 8. PHP-FPM. se define como un servidor ascendente en el archivo /etc/nginx/conf.d/php-fpm.conf. dentro de un bloque ascendente, con el nombre php-fpm.

Puede realizar cambios aquí en consecuencia, dependiendo de la dirección que PHP-FPM. esté configurada para escuchar, en th e 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.sock;  Configurar PHP Upstream Servidor en Nginx  Configurar el servidor ascendente PHP en Nginx Configurar el servidor ascendente PHP en Nginx

y en el archivo de bloqueo del servidor de su sitio, simplemente configure el parámetro fastcgi_pass como se muestra.

fastcgi_pass php-fpm;  Configurar Nginx a PHP-FPM Upstream Server  Configurar Nginx a PHP-FPM Upstream Server Configurar Nginx al servidor ascendente PHP-FPM

Después de realizar cambios en las configuraciones de PHP-FPM. y NGINX. verifique que la sintaxis de configuración sea correcta 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 la salida del comando muestra el archivo de configuración principal solamente, todos los demás archivos de configuración están incluidos y verificados también.

 Verifique la configuración de Nginx y PHP-FPM  Verifique la configuración de Nginx y PHP-FPM Verifique la configuración de Nginx y PHP-FPM

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

————-En Debian y Ubuntu————- $ sudo systemctl restart nginx $ sudo systemctl restart php7.4-fpm ————-En CentOS/RHEL y Fedora————- # systemctl restart nginx # systemctl restart php-fpm

Si recibe algún error, puede verificar 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.log ————-En CentOS/RHEL y Fedora————- $ cat/var/log/nginx/error.log $ cat/var/log/php-fpm/www-error.log

Eso es todo lo que tenía 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.