No ambiente de desenvolvimento ou produção, pode ser necessário rodar múltiplas versões do PHP no mesmo servidor. Se você já tem o PHP instalado de forma modular (com mod_php
) e deseja aproveitar os benefícios do PHP-FPM, como performance otimizada e mais controle, este tutorial vai te guiar em como configurar ambas as opções no Apache. Você poderá, então, escolher qual versão de PHP usar em diretórios ou sites específicos.
1. O Que São mod_php
e PHP-FPM?
mod_php
: Omod_php
é um módulo do Apache que integra o PHP diretamente ao servidor. Ou seja, o Apache executa o código PHP de forma nativa, sem a necessidade de um processo externo. No entanto, isso pode ser menos eficiente e mais difícil de escalar em ambientes mais complexos.- PHP-FPM (FastCGI Process Manager): O PHP-FPM é uma forma mais moderna e eficiente de rodar o PHP. Ele usa processos separados para gerenciar as requisições, permitindo maior controle e performance. Além disso, ele permite rodar diferentes versões de PHP no mesmo servidor sem conflito.
2. Pré-requisitos
- Apache instalado e funcionando.
- PHP já instalado (com
mod_php
ou modular). - Acesso de administrador ao servidor para instalar pacotes e modificar configurações do Apache.
3. Instalando PHP-FPM
Se você ainda não tem o PHP-FPM instalado, siga os passos abaixo para instalar as versões de PHP que deseja:
Para Debian/Ubuntu:
sudo apt update
sudo apt install php7.4-fpm php8.1-fpm
Para CentOS/Rocky:
sudo dnf install php74 php74-php-fpm php81 php81-php-fpm
Depois, habilite e inicie os serviços do PHP-FPM:
sudo systemctl enable php7.4-fpm php8.1-fpm
sudo systemctl start php7.4-fpm php8.1-fpm
4. Desabilitando mod_php
Se você já usa mod_php
e quer migrar para PHP-FPM, é uma boa prática desabilitar o mod_php
para evitar conflitos de configuração.
Para desabilitar mod_php
:
sudo a2dismod php7.4
sudo a2dismod php8.1
Em seguida, reinicie o Apache:
sudo systemctl restart apache2
5. Habilitando o mod_proxy_fcgi
Para que o Apache possa se comunicar com o PHP-FPM, é necessário habilitar o módulo mod_proxy_fcgi
:
sudo a2enmod proxy_fcgi setenvif
sudo systemctl restart apache2
6. Configurando o Apache para Usar PHP-FPM
Agora, vamos configurar o Apache para usar o PHP-FPM. Isso pode ser feito de maneira global (para todos os sites) ou por diretório.
6.1 Configuração Global (Para Todos os Sites)
Edite o arquivo de configuração do Apache, que pode ser algo como /etc/apache2/sites-available/000-default.conf
, e adicione a seguinte configuração:
<VirtualHost *:80>
DocumentRoot /var/www/seusite
ServerName seusite.com
<Directory "/var/www/seusite">
AllowOverride All
Require all granted
</Directory>
<IfModule mod_proxy_fcgi.c>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
</VirtualHost>
Essa configuração faz com que o Apache use o PHP 7.4 (via PHP-FPM) para todos os arquivos .php
.
6.2 Configuração por Diretório ou Por Site
Você também pode configurar o Apache para usar diferentes versões de PHP em diretórios ou sites específicos, editando o .htaccess
dentro do diretório do site:
Por exemplo, para usar PHP 7.4 em um site:
<IfModule mod_proxy_fcgi.c>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
E para um outro diretório ou site, você pode configurar PHP 8.1, alterando o socket:
<IfModule mod_proxy_fcgi.c>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
7. Verificando se Está Funcionando
Para verificar se a versão do PHP foi corretamente configurada, crie um arquivo info.php
no diretório do site:
<?php phpinfo(); ?>
Acesse o site no navegador (http://seusite.com/info.php
) e verifique a versão do PHP exibida.
8. Conclusão
Agora você tem um servidor Apache configurado para rodar múltiplas versões de PHP usando PHP-FPM, permitindo maior flexibilidade e controle. Você pode:
- Usar PHP-FPM para diferentes versões de PHP em diretórios ou sites específicos.
- Desabilitar o
mod_php
para evitar conflitos. - Melhorar a performance e o controle do seu ambiente.