15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
01.11.2024
1 +1

Modos PHP em VPS: mod_php vs FastCGI vs PHP-FPM — Guia Completo

PHP alimenta mais de 80% de todos os sites na internet, mas uma das decisões de desempenho mais negligenciadas é escolher o modo de execução PHP correto. Escolha o errado e você enfrentará tempos de carregamento lentos, consumo excessivo de RAM e travamentos do servidor durante picos de tráfego. Escolha o correto e sua aplicação escalará sem esforço, mesmo sob carga concorrente pesada.

Este guia detalha os três principais modos de execução PHP — mod_php, FastCGI e PHP-FPM — com contexto de desempenho do mundo real, exemplos de configuração e recomendações claras para diferentes casos de uso. Quer você esteja executando um blog pessoal ou uma plataforma de e-commerce de alto tráfego, entender esses modos é fundamental para aproveitar ao máximo seu ambiente de servidor.

Índice

  1. O que são Modos de Execução PHP?
  2. mod_php — O Módulo Apache Clássico
  3. FastCGI — Desacoplando PHP do Servidor Web
  4. PHP-FPM — O Padrão Moderno para Alto Desempenho
  5. Comparação Lado a Lado
  6. Como Configurar PHP-FPM em um VPS (Ubuntu/Debian)
  7. PHP-FPM com Nginx
  8. PHP-FPM com Apache
  9. Ajuste de Pool PHP-FPM para Produção
  10. Qual Modo PHP Você Deve Escolher?
  11. Conclusão

O que são Modos de Execução PHP? {#what-are-php-execution-modes}

Um modo de execução PHP define como seu servidor web interpreta e executa scripts PHP. Ele determina a relação entre o processo do servidor web (Apache, Nginx, LiteSpeed) e o intérprete PHP — especificamente, se eles compartilham o mesmo processo, se comunicam via protocolo ou operam como serviços gerenciados totalmente separados.

Os três modos principais são:

ModoArquiteturaMelhor Para
mod_phpPHP incorporado no ApacheAmbientes compartilhados simples
FastCGIPHP como um processo separadoSites de tráfego médio
PHP-FPMPools de processos PHP gerenciadosAplicações de alto tráfego e produção

Escolher o modo correto impacta diretamente uso de memória, throughput de requisições, isolamento e escalabilidade. Em um ambiente de VPS Hosting onde os recursos são dedicados e configuráveis, você tem total liberdade para implementar o modo que melhor se adequa à sua carga de trabalho.

mod_php — O Módulo Apache Clássico {#mod_php}

O que é mod_php?

mod_php é um módulo Apache que incorpora o intérprete PHP diretamente no processo do servidor web Apache. É o método mais antigo e historicamente mais comum de executar PHP.

Como mod_php Funciona

Quando Apache recebe uma requisição para um arquivo .php, ele trata a execução internamente — nenhum processo externo é gerado, nenhuma comunicação de socket ocorre. PHP vive dentro do Apache.

Browser Request → Apache (with embedded PHP) → Response

Características de Desempenho

Para sites de baixo tráfego e ambientes de desenvolvimento, mod_php funciona adequadamente. Como PHP já está carregado na memória do Apache, não há overhead de geração de processo por requisição.

No entanto, essa arquitetura tem um defeito crítico: cada processo worker do Apache carrega um intérprete PHP completo na memória, independentemente de estar servindo um arquivo PHP ou um ativo estático como uma imagem ou arquivo CSS.

Desvantagens do mod_php

  • Alto consumo de memória: Cada worker do Apache (mesmo aqueles servindo arquivos estáticos) mantém o runtime PHP completo em RAM.
  • Sem isolamento por site: Todos os hosts virtuais compartilham o mesmo processo PHP e contexto de usuário, o que é uma preocupação de segurança em servidores multi-tenant.
  • Flexibilidade de configuração limitada: Você não pode executar diferentes versões de PHP para diferentes hosts virtuais sem workarounds significativos.
  • Incompatível com Nginx: mod_php é exclusivo do Apache; não pode ser usado com Nginx ou LiteSpeed.
  • Escalabilidade ruim sob carga: Sob alta concorrência, a exaustão de memória se torna um risco real.

Quando Usar mod_php

  • Ambientes de desenvolvimento local
  • Sites pessoais de muito baixo tráfego
  • Aplicações legadas onde reconfiguração não é viável

FastCGI — Desacoplando PHP do Servidor Web {#fastcgi}

O que é FastCGI?

FastCGI é um protocolo que permite ao servidor web se comunicar com um processo PHP externo, em vez de incorporar PHP dentro de si mesmo. É uma melhoria arquitetônica significativa em relação ao mod_php.

Como FastCGI Funciona

O servidor web (Apache ou Nginx) passa requisições PHP para um processo FastCGI persistente via socket Unix ou porta TCP. O processo PHP trata a execução e retorna o resultado.

Browser Request → Web Server → FastCGI Socket → PHP Process → Response

A palavra-chave aqui é persistente: diferentemente do CGI (o protocolo original), os processos FastCGI permanecem vivos entre requisições, eliminando o overhead de gerar um novo processo para cada requisição.

Características de Desempenho

FastCGI reduz significativamente o overhead de memória em comparação com mod_php porque requisições de arquivos estáticos são tratadas inteiramente pelo servidor web sem envolver PHP. Processos PHP são invocados apenas quando genuinamente necessário.

Desvantagens do FastCGI

  • Complexidade de configuração: Requer configuração adicional em comparação com mod_php, incluindo configuração de socket ou porta.
  • Gerenciamento de processo limitado: FastCGI básico carece dos recursos avançados de gerenciamento de pool necessários para ambientes de produção.
  • Superado por PHP-FPM: Na maioria das implantações modernas, PHP-FPM (que é construído sobre FastCGI) é preferido em relação a implementações FastCGI básicas.

Quando Usar FastCGI

  • Sites de tráfego médio
  • Ambientes onde PHP-FPM não está disponível
  • Configurações transitórias migrando de mod_php

PHP-FPM — O Padrão Moderno para Alto Desempenho {#php-fpm}

O que é PHP-FPM?

PHP-FPM (FastCGI Process Manager) é uma implementação avançada e rica em recursos do protocolo FastCGI. É o padrão de facto para executar PHP em ambientes de produção e é o modo recomendado para qualquer aplicação web séria.

Como PHP-FPM Funciona

PHP-FPM gerencia um pool de processos workers PHP. O servidor web encaminha requisições PHP para PHP-FPM via socket Unix ou conexão TCP. PHP-FPM gerencia dinamicamente o número de processos workers ativos com base no tráfego atual, gerando novos workers sob carga e liberando-os durante períodos tranquilos.

Browser Request → Nginx/Apache → Unix Socket → PHP-FPM Pool → PHP Worker → Response

Principais Vantagens do PHP-FPM

#### 1. Gerenciamento Dinâmico de Processos

PHP-FPM suporta múltiplas estratégias de gerenciamento de processos:

  • static: Número fixo de processos workers (previsível, bom para alto tráfego)
  • dynamic: Workers escalam entre um mínimo e máximo com base na demanda
  • ondemand: Workers são gerados apenas quando requisições chegam (eficiente em memória para baixo tráfego)

#### 2. Configuração Por Pool

Cada aplicação ou host virtual pode ter seu próprio pool PHP-FPM com configurações independentes:

  • Usuário/grupo Unix separado (isolamento de segurança melhorado)
  • Versão PHP diferente por pool
  • Valores php.ini personalizados por aplicação
  • Limites de recursos individuais

#### 3. Registro de Requisições Lentas

PHP-FPM pode registrar requisições que excedem um limite de tempo de execução definido, tornando-o inestimável para identificar gargalos de desempenho.

#### 4. Eficiência de Recursos

Como processos PHP são gerenciados separadamente do servidor web, ativos estáticos são servidos sem nenhum overhead de PHP. A memória é consumida apenas por workers PHP ativos.

#### 5. Compatibilidade

PHP-FPM funciona perfeitamente com Nginx, Apache (via mod_proxy_fcgi) e LiteSpeed. Quando combinado com Nginx ou LiteSpeed, os ganhos de desempenho são substanciais — frequentemente citados como 5–10x mais rápido sob carga concorrente em comparação com mod_php com Apache.

Comparação Lado a Lado {#comparison}

Recursomod_phpFastCGIPHP-FPM
ArquiteturaIncorporado no ApacheProcesso externoPool de processos gerenciado
Eficiência de memóriaBaixaMédiaAlta
Overhead de arquivo estáticoAltoBaixoBaixo
Tratamento de requisições concorrentesRuimBomExcelente
Versão PHP por siteNãoLimitadoSim
Isolamento de segurançaRuimMédioExcelente
Compatibilidade com NginxNãoSimSim
Complexidade de configuraçãoBaixaMédiaMédia
Prontidão para produçãoNãoParcialSim
Registro de requisições lentasNãoNãoSim

Como Configurar PHP-FPM em um VPS (Ubuntu/Debian) {#setup}

As instruções a seguir se aplicam ao Ubuntu 22.04 LTS e Debian 11/12. Se você estiver executando sua aplicação em um plano de VPS Hosting, você terá acesso root completo para executar esses comandos.

Passo 1: Atualize Seu Sistema e Instale PHP-FPM

sudo apt update && sudo apt upgrade -y
sudo apt install php-fpm -y

Para instalar uma versão específica de PHP (por exemplo, PHP 8.2):

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2-fpm -y

Passo 2: Verifique se PHP-FPM Está Executando

sudo systemctl status php8.2-fpm

Você deve ver active (running) na saída. Se não, inicie e ative:

sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpm

Passo 3: Confirme o Caminho do Socket

PHP-FPM se comunica via socket Unix. Verifique sua localização:

ls /var/run/php/
# Expected output: php8.2-fpm.sock

PHP-FPM com Nginx {#nginx}

Nginx é o servidor web mais comum emparelhado com PHP-FPM, e por uma boa razão — a arquitetura orientada a eventos e não-bloqueante do Nginx complementa perfeitamente o modelo de pool de processos do PHP-FPM.

Instale Nginx

sudo apt install nginx -y

Configure o Bloco de Servidor Nginx

Edite o arquivo de configuração do seu site:

sudo nano /etc/nginx/sites-available/yourdomain.com

Adicione a seguinte configuração:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    root /var/www/yourdomain.com/public;
    index index.php index.html index.htm;

    # Handle PHP files
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Deny access to .htaccess files
    location ~ /.ht {
        deny all;
    }

    # Serve static files directly
    location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

Ative o Site e Reinicie Nginx

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

PHP-FPM com Apache {#apache}

Se você preferir Apache — ou se sua aplicação depender de arquivos .htaccess — você ainda pode usar PHP-FPM via módulo mod_proxy_fcgi do Apache.

Ative Módulos Apache Necessários

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpm

Configure o Host Virtual Apache

sudo nano /etc/apache2/sites-available/yourdomain.com.conf
<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    DocumentRoot /var/www/yourdomain.com/public

    <Directory /var/www/yourdomain.com/public>
        AllowOverride All
        Require all granted
    </Directory>

    # Route PHP requests to PHP-FPM
    <FilesMatch .php$>
        SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/yourdomain_error.log
    CustomLog ${APACHE_LOG_DIR}/yourdomain_access.log combined
</VirtualHost>

Ative o Site e Reinicie Apache

sudo a2ensite yourdomain.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2

Ajuste de Pool PHP-FPM para Produção {#tuning}

A configuração padrão do pool PHP-FPM é conservadora e adequada para desenvolvimento. Para cargas de trabalho de produção, você deve ajustar as configurações do pool com base na RAM disponível do seu servidor e no tráfego esperado.

Localize o Arquivo de Configuração do Pool

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Parâmetros-Chave para Ajustar

; Process management mode: static, dynamic, or ondemand
pm = dynamic

; Maximum number of child processes
pm.max_children = 50

; Number of processes started on boot
pm.start_servers = 10

; Minimum idle processes
pm.min_spare_servers = 5

; Maximum idle processes
pm.max_spare_servers = 20

; Requests per child before recycling (prevents memory leaks)
pm.max_requests = 500

; Log slow requests (requests taking longer than 5 seconds)
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log

Calculando pm.max_children

Uma fórmula prática para ambientes dinâmicos:

pm.max_children = (Available RAM in MB) / (Average PHP process size in MB)

Para encontrar o tamanho médio do processo PHP:

ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf "%.0f MBn", sum/NR/1024 }'

Em um site típico de WordPress, cada worker PHP-FPM consome aproximadamente 30–60 MB. Em um VPS com 2 GB de RAM (deixando ~1,5 GB para PHP após overhead do SO), você pode executar com segurança 25–50 workers.

Aplique Alterações

sudo systemctl reload php8.2-fpm

Qual Modo PHP Você Deve Escolher? {#which-to-choose}

Aqui está um guia prático de decisão:

Escolha mod_php se:

  • Você está executando um ambiente de desenvolvimento local
  • Você tem um site estático muito simples e de baixo tráfego
  • Você está em hospedagem compartilhada legada sem outras opções

Escolha FastCGI se:

  • Você está em um site de tráfego médio e PHP-FPM não está disponível
  • Você está migrando de mod_php e precisa de um passo intermediário

Escolha PHP-FPM se:

  • Você está executando qualquer aplicação de produção
  • Você precisa suportar múltiplas versões de PHP no mesmo servidor
  • Você está executando WordPress, Laravel, Symfony, Magento ou qualquer framework PHP moderno
  • Você quer isolamento de segurança por aplicação
  • Você está usando Nginx (PHP-FPM é a única opção viável)
  • Você precisa de escalabilidade sob tráfego concorrente

Para a grande maioria dos casos de uso de produção, PHP-FPM é o claro vencedor. É a configuração padrão em plataformas de hospedagem gerenciada modernas, e é o que você deve estar executando em qualquer VPS auto-gerenciado.

Se você está gerenciando múltiplos sites e quer uma interface gráfica para lidar com alternância de modo PHP, gerenciamento de pool de processos e configuração de host virtual sem editar arquivos de configuração manualmente, considere um VPS com cPanel — o EasyApache 4 do cPanel permite que você alterne manipuladores PHP por domínio com alguns cliques.

Alternativamente, explore a gama completa de Painéis de Controle VPS disponíveis para encontrar a interface de gerenciamento que melhor se adequa ao seu fluxo de trabalho.

Protegendo Sua Aplicação PHP Além do Modo de Execução

Escolher o modo de execução PHP correto é uma camada de sua estratégia de segurança e desempenho do servidor. Aqui estão considerações adicionais:

Criptografia SSL/TLS

Toda aplicação PHP de produção deve ser servida via HTTPS. Um site não criptografado expõe dados do usuário e classifica-se mais baixo nos resultados de busca do Google. Você pode proteger seu domínio com um Certificado SSL confiável para ativar HTTPS e proteger seus visitantes.

Recursos Dedicados para Aplicações de Alto Tráfego

Se sua aplicação PHP consistentemente trata milhares de usuários concorrentes, um VPS compartilhado ou de nível básico pode

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar