Como conectar o nginx ao php-fpm usando o soquete UNIX ou TCP/IP

Como conectar o nginx ao php-fpm usando o soquete UNIX ou TCP/IP

Nginx O servidor da web (como proxy reverso) serve aplicativos PHP através do Fastcgi Protocolo (como um servidor de aplicativos de back -end). Nginx emprega PHP-FPM (Fastcgi Process Manager), uma alternativa Php fastcgi implementação que é executada em segundo plano como daemon, ouvindo CGI solicitações de. Ele vem com recursos extras projetados para alimentar sites com carga pesada ou aplicativos da web, mas podem ser usados ​​para sites de qualquer tamanho.

Não apenas faz PHP-FPM apoiar a configuração de Fastcgi pools de recursos, mas também melhora muitos dos Fastcgi internos e aumenta o relatório de erros, terminação de scripts e muito mais. Possui demonização PHP, gerenciamento de processos, um número dinâmico de processos dos quais solicitações podem vir, cabeçalho de erro, suporte de upload acelerado e mais.

Aceitar Fastcgi solicitações de Nginx, PHP-FPM pode ouvir em um TCP/IP soquete ou soquete de domínio Unix. Qualquer endereço que você escolher usar é o que Nginx usos para conectar (solicitações de proxy) a PHP-FPM, usando o fastcgi_pass diretivo.

Este guia explica como configurar Nginx para os aplicativos de PHP do servidor usando PHP-FPM. Descreve quando usar um TCP/IP soquete ou soquete de domínio unix para conectar Nginx para PHP-FPM e porque.

Este guia assume que você tem Nginx e PHP-FPM Instalado no seu sistema Linux, caso contrário, consulte:

  • Como instalar o servidor Lemp no CentOS 8
  • Como instalar o Lemp Stack Phpmyadmin no Ubuntu 20.04 servidor
  • Como instalar o nginx, mysql/mariadb e php no rhel 8
  • Como instalar o Lemp no Debian 10 Server

O que devo usar: soquete de domínio unix ou soquete TCP/IP?

Unix domínio (ou IPC) Sockets são um meio de comunicação entre processos (IPC) que permitem a troca de dados eficientes entre os processos em execução no mesmo sistema operacional enquanto TCP/IP (ou Domínio da Internet) Sockets permitem que os processos se comuniquem em uma rede.

Ao contrário de um TCP/IP soquete que identifica um servidor por um endereço IP e porta (e.g 127.0.0.1: 9000), você pode vincular um servidor a um soquete de domínio UNIX usando um nome de caminho (e.g /run/php-fpm/www.meia), que é visível no sistema de arquivos.

Um soquete de domínio UNIX é um tipo especial de arquivo - permissões de arquivo e diretório se aplica a ele (como é o caso de qualquer outro tipo de arquivo Unix) e pode ser usado para restringir quais processos no host podem ler e gravar no arquivo, (e, assim, comunique -se com o servidor de back -end).

Dessa forma, um soquete de domínio UNIX é seguro porque apenas processos no host local podem usá -lo. A TCP/IP O soquete pode ser exposto à Internet que representa um risco de segurança, a menos que medidas extras de segurança, como um firewall, sejam implementadas.

Importante, usando um Unix O soquete de domínio não é o mesmo que usar um TCP/IP Socket sobre o desempenho, vários testes e benchmarks têm soquetes de domínio Unix comprovados para serem mais rápidos. A principal desvantagem dos soquetes do Domínio UNIX é que eles são menos escaláveis, eles só suportam a comunicação entre processos dentro do mesmo sistema operacional (OS).

Onde posso configurar php-fpm ouvir endereço?

Você pode configurar o endereço PHP-FPM ouve em um arquivo de configuração do pool de recursos. Observe isso com PHP-FPM, Você pode executar vários pools de processos com diferentes configurações. O pool padrão é chamado www.

A localização do arquivo de configuração do pool de recursos depende da maneira Php e PHP-FPM estão instalados em um sistema Linux (seja uma versão padrão/única ou várias versões simultaneamente).

Por exemplo, em CENTOS 8, Com uma única versão, todos os arquivos de configuração do PHP estão localizados no /etc diretório e o padrão PHP-FPM piscina (www) O arquivo de configuração é /etc/php-fpm.d/www.conf:

Para listar todos os arquivos de configuração do PHP, use o seguinte comando ls.

# ls /etc /php* 
Liste todos os arquivos de configuração do PHP

Sobre Ubuntu 20.04, Os arquivos de configuração do PHP estão localizados no /etc/php // diretório e o padrão PHP-FPM piscina (www) O arquivo de configuração é /etc/php // fpm/pool.d/www.conf:

$ ls/etc/php/7.4/ 
Liste todos os arquivos de configuração do PHP no Ubuntu

Configurando o PHP-FPM para ouvir em um soquete de domínio UNIX

Para configurar PHP-FPM Para ouvir em um soquete de domínio UNIX, abra seu padrão PHP-FPM Arquivo de configuração do pool, usando seu editor de texto favorito.

$ sudo vim/etc/php/7.4/fpm/piscina.d/www.conf # ubuntu/debian ou # vim/etc/php-fpm.d/www.conf #centos/rhel/fedora 

Em seguida, procure a diretiva de escuta e defina -a para o nome do caminho do arquivo do soquete do Domínio UNIX da seguinte maneira. Observe que a maioria das instalações usa um soquete de domínio UNIX por padrão.

Ouça =/RUN/PHP/PHP7.4-fpm.meia #ubuntu/debian ou ouvir =/run/php-fpm/www.meia #centos/rhel/fedora 

Se você usar um soquete de domínio UNIX, também precisar. Por padrão, o nginx é executado como usuário e grupo nginx sobre CENTOS/RHEL/FEDORA e www-data sobre Ubuntu e Debian.

Então, encontre o ouvir.proprietário e ouvir.grupo parâmetros e defina -os de acordo. Além disso, defina o modo como 0660 usando o ouvir.modo parâmetro.

------------- Em Debian e Ubuntu ------------- ouvir.proprietário = www-data ouça.Grupo = www-data ouça.modo = 0660 ------------- No CentOS/Rhel e Fedora ------------- ouvir.proprietário = nginx ouça.grupo = nginx ouça.modo = 0660 

Observe que se as permissões no arquivo de soquete do Domínio UNIX não estiverem definidas corretamente, o Nginx poderá retornar um erro de gateway ruim.

Configuração do PHP-FPM

Configurando o PHP-FPM para ouvir em um soquete TCP/IP

Embora um soquete de domínio UNIX seja mais rápido que um soquete TCP/IP, o primeiro é menos escalável, porque só pode suportar a comunicação entre processos no mesmo sistema. Se Nginx e o servidor de aplicativos de back -end (PHP-FPM) estão funcionando em sistemas diferentes, você terá que configurar PHP-FPM Para ouvir em um soquete TCP/IP para conexões.

No PHP-FPM arquivo de configuração do pool, defina o ouvir endereço da seguinte maneira. Verifique se a porta que você escolheu não está sendo usada por outro processo ou serviço no mesmo sistema.

Ouça = 127.0.0.1: 3000 
Configuração do PHP-FPM para soquete TCP

Configurando o nginx para trabalhar com o servidor de aplicativos PHP-FPM

Depois de configurar o endereço PHP-FPM ouve, você precisa configurar Nginx para solicitar proxy a ele através desse endereço, usando o fastcgi_pass Parâmetro de configuração, em um arquivo de configuração de bloco de servidor virtual.

Por exemplo, se o arquivo de configuração do seu site for /etc/nginx/conf.d/exemplo.com.conf, Abra para editar.

# vim/etc/nginx/conf.d/exemplo.com.conf 

Procure o localização bloco para processamento .php arquivos e defina o fastcgi_pass Parâmetro da seguinte maneira, se você configurou o PHP-FPM para ouvir em um soquete de domínio UNIX.

fastcgi_pass Unix:/run/php/php7.4-fpm.SOCK #Ubuntu/Debian ou fastcgi_pass Unix:/run/php-fpm/www.meia #centos/rhel/fedora 
Conecte o nginx ao php-fpm usando o soquete Unix

Ou use um TCP/IP endereço se você configurou PHP-FPM Para ouvir em um TCP/IP soquete. Se o servidor de aplicativos de back -end (PHP-FPM) está em execução em um servidor separado (substitua 10.42.0.10 com o endereço IP da máquina na qual o servidor fastcgi php-fpm está em execução).

fastcgi_pass 10.42.0.10: 3000; 
Conecte o nginx ao php-fpm usando o soquete TCP

Importante: Sobre CENTOS 8, PHP-FPM é definido como um servidor upstream no /etc/nginx/conf.D/PHP-FPM.conf arquivo, dentro de um bloco a montante, com o nome PHP-FPM.

Você pode fazer alterações aqui de acordo com o endereço PHP-FPM está configurado para ouvir, no arquivo de configuração do pool. A configuração padrão aponta para um soquete de domínio UNIX.

upstream php-fpm server unix:/run/php-fpm/www.meia;  
Configure o servidor PHP upstream no nginx

E no arquivo de bloco de servidor do seu site, basta definir o fastcgi_pass parâmetro como mostrado.

fastcgi_pass php-fpm; 
Configure o nginx para o servidor upstream php-fpm

Depois de fazer alterações no PHP-FPM e Nginx Configurações, verifique sua sintaxe de configuração para correção da seguinte maneira.

------------- Em Debian e Ubuntu ------------- $ sudo php -fpm -t $ sudo nginx -t ------------- No CentOS/Rhel e Fedora ------------- # php -fpm -t # nginx -t 

Enquanto a saída do comando mostra apenas o arquivo de configuração principal, todos os outros arquivos de configuração estão incluídos e verificados também.

Verifique a configuração nginx e php-fpm

Em seguida, você precisa reiniciar os dois serviços para aplicar as alterações, usando o comando SystemCTL.

------------- Em Debian e Ubuntu ------------- $ sudo systemctl reiniciar nginx $ sudo systemctl reiniciar php7.4-fpm ------------- No CentOS/Rhel e Fedora ------------- # SystemCtl Reiniciar nginx # SystemCtl Restart php-fpm 

Se você receber algum erro, pode verificar o Nginx e PHP-FPM Arquivos de log usando o comando CAT.

------------- Em Debian e Ubuntu ------------- $ cat/var/log/nginx/erro.log $ cat/var/log/php7.4-fpm.registro ------------- No CentOS/Rhel e Fedora ------------- $ cat/var/log/nginx/erro.Log $ cat/var/log/php-fpm/www-error.registro 

Isso é tudo o que tivemos para você. A seção de comentários abaixo pode ser usada para fazer perguntas. Para obter mais informações, consulte a documentação do NGINX e a documentação do PHP-FPM.