Table of Contents
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 *
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/
$ ls/etc/php/7.4/
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 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 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
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;
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 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 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
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.