GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo conectar NGINX a PHP-FPM usando UNIX o TCP/IP Socket

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?

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

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
Ubuntu
  1. Cómo instalar WordPress usando Nginx en Ubuntu 18.04

  2. Cómo redirigir URL usando Nginx

  3. Ssh:¿cómo conectarse a una PC a través de otra PC usando Ssh?

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

  5. Cómo configurar Nginx para ejecutar PHP usando PHP-FPM

Cómo cambiar la escucha de PHP-FPM en un zócalo de Unix

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

Cómo conectar NGINX a PHP-FPM usando UNIX o TCP/IP Socket

Cómo instalar WordPress usando Nginx en Ubuntu Linux

Cómo configurar PHP-FPM con NGINX

Cómo conectarse a MySQL usando PHP