Tentando confirmar se o php7.0-fpm está funcionando com o Apache no Ubuntu 16.04

Tentando confirmar se o php7.0-fpm está funcionando com o Apache no Ubuntu 16.04

Configurei o php7.0-fpm para funcionar com o Apache no Ubuntu 16.04, mas não tenho certeza se ele está configurado e funcionando corretamente.

Pelo que entendi, após a instalação e configuração, a saída do arquivo de informações do php deve exibir "API do servidor -> FPM/FastCGI", mas ainda mostra "API do servidor -> Apache 2.0 Handler".

Foi assim que instalei e configurei o php7.0-fpm:

sudo apt-get install libapache2-mod-fastcgi php7.0-fpm

sudo a2enmod actions fastcgi alias

sudo a2enconf php7.0-fpm

sudo service php7.0-fpm restart

sudo systemctl status php7.0-fpm

sudo systemctl restart apache2.service

Abaixo está a saída de sudo systemctl status php7.0-fpm:

php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-11-25 11:57:33 UTC; 23h ago
Process: 1149 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 1336 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3
Memory: 37.8M
CPU: 3.089s
CGroup: /system.slice/php7.0-fpm.service
├─1336 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─1340 php-fpm: pool www
└─1341 php-fpm: pool www

Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

O que estou fazendo de errado? Gostaria de receber alguma ajuda e conselhos?

Abaixo está o conteúdo do meu /etc/apache2/conf-enabled/php7.0-fpm.confarquivo:

<Directory /usr/lib/cgi-bin>
    Require all granted
</Directory>
<IfModule mod_fastcgi.c>
    AddHandler php7-fcgi .php 
    Action php7-fcgi /php7-fcgi
    Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
</IfModule>

Responder1

Você precisa ativar o proxy_fcgimódulo e desativar mod_php7para que o arquivo stock php7.0-fpmconf seja eficaz.

Se você olhar /etc/apache2/conf-enabled/php7.0-fpm.conf, verá isso no topo:

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>

Responder2

Consegui fazer isso funcionar sem muitos problemas seguindo as instruções emBlog de desenvolvimento de Koen Reiniers. Segui quase exatamente as instruções e, com uma exceção, anotada nos comentários da postagem do blog, funcionou perfeitamente. Você vai precisarmod_fastcgi, bem como vários outros módulos. Esta receita permitirá que você configure vários vhosts, cada um dos quais usa uma configuração php7 fpm independente. Observe que a menos quephpinfo()está mostrando uma API de servidor de "FPM/FastCGI", então você errou o alvo. Este é o teste decisivo de que a pilha está funcionando. Como verificação, também executei "<?php touch('/tmp/fpmtest');" para verificar se os processos iniciados para meu vhost estavam sendo executados como o usuário/grupo especificado (eles estavam).

Esta receita foi copiada, com algumas modificações, do blog de Koen, e ele merece crédito por suas orientações claras e eficazes.

Com a possível exceção das estrofes relacionadas à segurança, você nãonãodeseja habilitar o conf do Apache paraphp7.0-fpmse você usar esta receita. O único código que precisa ser executado globalmente é:

<Directory "/usr/lib/cgi-bin">
  Require all granted
</Directory>

Se a sua configuração do Apache2 permitirmod_cgi.centão isso provavelmente já foi resolvido no arquivo conf padrão do módulo. Caso contrário, se este módulo (oumod_cgid.c) ainda não estiver habilitado, ele pode ser adicionado a qualquer arquivo conf executado na inicialização do Apache2, embora, dependendo do ambiente do seu servidor, possa ser mais seguro adicioná-lo apenas a cada <VirtualHost> para o qual o PHP-FPM está habilitado. Código relacionado à segurança dephp7.0-fpm.conftambém pode ser copiado para o mesmo local ou ativado globalmente.

Este guia pressupõe que você tenha o PHP 7.0.* em execução, bem como o Apache (com hosts virtuais), em um servidor Ubuntu. Além disso, não tente fazer isso em um ambiente de produção sem ter backups adequados.

Primeiro certifique-sephp7.0-fpmestá instalado em seu sistema:

$ sudo apt-get install php7.0-fpm

Depois de instalado, inicie o serviço, caso não tenha feito isso automaticamente, e verifique se ele está em execução:

$ sudo service php7.0-fpm start && ps aux | grep php-fpm

Para usar PHP-FPM para cada um dos seus hosts virtuais você terá que dividi-lo em vários pools de recursos, um para cada usuário <VirtualHost> separado, o que significa que se você tiver vários hosts atribuídos a um usuário, você só terá para criar um pool de recursos para esse usuário.

O local padrão para a configuração do pool para PHP-FPM é:

/etc/php/7.0/fpm/pool.d/

Para criar uma nova configuração para um de seus usuários, basta criar um novo arquivo .conf. Usei o nome de usuário do usuário como nome do arquivo de configuração:

$ sudo vim /etc/php/7.0/fpm/pool.d/username.conf

E use isso como sua configuração (substitua "nome de usuário" pelo nome real do seu usuário):

[username]
    user = username
    group = username
    listen = /run/php/php7.0-fpm.username.sock
    listen.owner = username
    listen.group = username
    listen.mode = 0666

    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3

As primeiras sete linhas são as mais importantes. Certifique-se de que eles sejam iguais ao usuário do Apache virtualhost. As últimas cinco linhas são as configurações padrão do gerenciador de processos. Deixe-os como estão por uma questão de simplicidade, mas você pode alterá-los ao seu gosto. Você pode ler mais sobre essas configurações no arquivo de configuração padrão localizado em:

/etc/php/7.0/fpm/pool.d/www.conf

A única coisa que resta é dizer ao Apache para usar PHP-FPM em vez de mod_php. Primeiro, certifique-se de ter mod_actions e mod_fastcgi habilitados:

$ sudo a2enmod actions fastcgi
$ sudo service apache2 restart

Adicione o manipulador PHP-FPM fastcgi ao Apache. Você terá que fazer isso para cada usuário que deseja usar PHP-FPM. Edite o arquivo por vhost para nome de usuário, normalmente em:

/etc/apache2/sites-available/username.conf

Adicione o seguinte no topo:

<IfModule mod_fastcgi.c>
  AddHandler php7-fcgi-username .php
  Action php7-fcgi-username /php7-fcgi-username
  Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
  FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.0-fpm.username.sock -pass-header Authorization
</IfModule>

Novamente, substitua “nome de usuário” pelo nome real do usuário do vhost.

Você deve informar ao seu vhost para realmente usá-lo para arquivos .php, portanto, no mesmo arquivo, mas na diretiva <VirtualHost>, adicione as seguintes linhas:

<IfModule mod_fastcgi.c>
  <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler php7-fcgi-username
  </FilesMatch>
</IfModule>

Substitua “nome de usuário” pelo nome do usuário vhost real novamente e salve o arquivo. Isso émuito importanteque a diretiva SetHandler seja wrppped com um subconjunto das tags de contêiner do sistema de arquivos condicional do Apache, <Location>, <LocationMatch>, <Files> ou <FilesMatch>. Omitir isso fará com que SetHandler seja ignorado. A tag <Directory> aparentemente não funciona.

Se você quiser aproveitar as vantagens dos recursos de "status" e "ping" do PHP-FPM e ativá-los em seu arquivo de pool por vhost no/etc/php/7.0/fpm/pool.ddiretório (veja/etc/php/7.0/fpm/pool.d/www.confpara obter detalhes), você precisará fazer duas modificações adicionais na configuração do Apache2. OAçãoA diretiva na parte superior do arquivo .conf per-vhost deve terminar com "virtual", assim:

Action php7-fcgi-username /php7-fcgi-username virtual

Além disso, seu wrapper SetHandler deve especificar uma expressão regular que inclua esses arquivos virtuais. Eu uso o seguinte:

<LocationMatch ".+\.ph(p[3457]?|t|tml)|/(ping|status)$">
    SetHandler ....
</LocationMatch>

Agora só falta deixar o Apache recarregar seus arquivos de configuração:

$ sudo service apache2 reload

Para ver se suas alterações entraram em vigor, crie um arquivo phpinfo.php no diretório público do seu site e visite-o no seu navegador:

&lt;?php phpinfo();

A API do servidor mostrada próximo ao topo da página deve mostrar "FPM/FastCGI".

Para concluir o processo, você deve repetir as etapas para cada um dos seus hosts virtuais. Quando você tiver certeza absolutamod_phpnão está mais sendo usado, você pode desativá-lo através de:

$ sudo a2dismod php7.0

Até que você faça isso, o Apache ainda incluirá um processo PHP para cada solicitação, o que significa que o uso de memória permanecerá o mesmo e possivelmente será ainda maior.

informação relacionada