Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Como otimizar o Apache para alta performance em VPS Linux: Guia Completo

16 min de leitura  ·  Guia técnico

Otimizar o Apache para alta performance em VPS Linux envolve ajustar configurações específicas para maximizar o desempenho do servidor web com recursos limitados. O processo inclui a seleção do MPM adequado, ajuste de workers, gerenciamento de memória e implementação de técnicas de cache. Neste guia, você aprenderá todas as etapas necessárias para aumentar significativamente a velocidade e capacidade do seu servidor Apache.

Pré-requisitos

  • Acesso root ao seu VPS Linux
  • Apache 2.4 ou superior instalado
  • Sistema operacional Linux (Ubuntu 22.04, CentOS 8, Debian 11 ou similar)
  • Conhecimentos básicos de linha de comando Linux
  • Backup recente do seu servidor antes de fazer alterações

Entendendo o Multi-Processing Module (MPM) do Apache

O Multi-Processing Module (MPM) é o componente fundamental que determina como o Apache gerencia conexões e processos. A escolha do MPM certo é o primeiro passo para otimizar o desempenho do Apache em ambientes VPS. Existem três MPMs principais disponíveis:

Prefork MPM

O Prefork é o MPM tradicional que cria processos separados para cada conexão. Cada processo tem seu próprio espaço de memória, o que o torna mais estável, porém menos eficiente em termos de recursos.

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Worker MPM

O Worker utiliza múltiplos processos com múltiplas threads, permitindo que um único processo atenda várias conexões simultaneamente, economizando recursos de memória.

LoadModule mpm_worker_module modules/mod_mpm_worker.so

Event MPM

O Event é uma evolução do Worker, projetado para lidar melhor com conexões keep-alive, reduzindo o número de processos necessários para servir requisições. É geralmente a melhor escolha para VPS modernos.

LoadModule mpm_event_module modules/mod_mpm_event.so

Para verificar qual MPM está atualmente em uso no seu servidor:

apache2ctl -V | grep MPM

Ou em sistemas baseados em Red Hat:

httpd -V | grep MPM
Output esperado:
Server MPM:     event  # ou prefork/worker

Configurando o MPM Event para máxima performance

A configuração do MPM Event é crucial para extrair o máximo desempenho do Apache em um ambiente VPS. Para ativar o MPM Event no Ubuntu ou Debian:

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

Em sistemas CentOS/RHEL, edite o arquivo de configuração principal:

sudo nano /etc/httpd/conf.modules.d/00-mpm.conf

Comente as linhas relacionadas a outros MPMs e descomente a linha do Event:

# LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so

Agora, vamos ajustar os parâmetros do MPM Event para otimizar o desempenho. Edite o arquivo de configuração:

sudo nano /etc/apache2/mods-available/mpm_event.conf

Ou em sistemas CentOS/RHEL:

sudo nano /etc/httpd/conf.modules.d/00-mpm.conf

Ajuste os parâmetros conforme os recursos do seu VPS. Para um VPS com 4GB de RAM, uma configuração otimizada seria:

<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         25
    MaxSpareThreads         75
    ThreadLimit             64
    ThreadsPerChild         25
    MaxRequestWorkers       150
    MaxConnectionsPerChild  3000
</IfModule>

Atenção: Ajuste o MaxRequestWorkers com base na memória disponível do seu VPS. Uma fórmula aproximada é: (RAM disponível em MB - RAM para SO e outros serviços) / 15MB por worker.

Otimizando o KeepAlive para reduzir a sobrecarga de conexões

A configuração do KeepAlive permite que uma única conexão TCP seja usada para múltiplas requisições HTTP, reduzindo significativamente a sobrecarga de estabelecer novas conexões. Para ajustar o KeepAlive, edite o arquivo principal de configuração do Apache:

sudo nano /etc/apache2/apache2.conf

Ou em sistemas CentOS/RHEL:

sudo nano /etc/httpd/conf/httpd.conf

Localize e ajuste as seguintes configurações:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Estas configurações permitem o KeepAlive, limitam a 100 requisições por conexão e definem um timeout de 5 segundos, o que é um bom equilíbrio entre performance e uso de recursos.

Explicação dos parâmetros KeepAlive

  • KeepAlive On/Off: Ativa ou desativa a funcionalidade de manter conexões abertas.
  • MaxKeepAliveRequests: Número máximo de requisições permitidas durante uma conexão persistente.
  • KeepAliveTimeout: Tempo em segundos que o servidor aguardará por novas requisições na mesma conexão.

Implementando cache e compressão para acelerar a entrega de conteúdo

A implementação de cache e compressão pode reduzir drasticamente o tempo de carregamento e o uso de banda. Vamos configurar os módulos necessários:

Ativando e configurando o mod_deflate para compressão

O mod_deflate comprime o conteúdo antes de enviá-lo ao cliente, reduzindo o tamanho da transferência:

sudo a2enmod deflate
sudo systemctl restart apache2

Em sistemas CentOS/RHEL, o módulo geralmente já está ativado. Configure-o editando:

sudo nano /etc/httpd/conf.d/deflate.conf

Adicione a seguinte configuração:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json
    DeflateCompressionLevel 6
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

Configurando o mod_expires para controle de cache

O mod_expires adiciona cabeçalhos de expiração aos recursos estáticos, permitindo que os navegadores os armazenem em cache:

sudo a2enmod expires
sudo systemctl restart apache2

Configure o módulo adicionando ao arquivo de configuração do seu site:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresDefault "access plus 2 days"
</IfModule>

Implementando o mod_cache para caching de servidor

O mod_cache permite que o Apache armazene em cache respostas completas, reduzindo a carga do servidor:

sudo a2enmod cache cache_disk
sudo systemctl restart apache2

Configure o cache em disco:

<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        CacheRoot /var/cache/apache2/mod_cache_disk
        CacheEnable disk /
        CacheDirLevels 2
        CacheDirLength 1
        CacheMaxFileSize 1048576
        CacheMinFileSize 1
        CacheDefaultExpire 3600
        CacheMaxExpire 86400
        CacheQuickHandler on
    </IfModule>
</IfModule>

Crie o diretório de cache e ajuste as permissões:

sudo mkdir -p /var/cache/apache2/mod_cache_disk
sudo chown -R www-data:www-data /var/cache/apache2/mod_cache_disk
sudo chmod -R 750 /var/cache/apache2/mod_cache_disk

Desativando módulos desnecessários para reduzir o consumo de memória

A remoção de módulos desnecessários pode liberar memória significativa em um ambiente VPS. Primeiro, verifique quais módulos estão atualmente carregados:

apache2ctl -M

Ou em sistemas CentOS/RHEL:

httpd -M

Desative módulos que não são necessários para sua aplicação. Aqui estão alguns módulos comumente desnecessários:

sudo a2dismod autoindex status info userdir cgi
sudo systemctl restart apache2

Em sistemas CentOS/RHEL, comente as linhas correspondentes nos arquivos de configuração em /etc/httpd/conf.modules.d/.

Módulos frequentemente desnecessários incluem:

  • autoindex: Gera listagens de diretórios
  • status: Fornece informações de status do servidor
  • info: Fornece informações de configuração
  • userdir: Permite diretórios pessoais de usuários
  • cgi: Suporte a CGI se você não o utiliza
  • negotiation: Negociação de conteúdo

Ajustando os limites do sistema operacional para o Apache

O ajuste dos limites do sistema operacional é essencial para permitir que o Apache utilize eficientemente os recursos disponíveis. Edite o arquivo de limites do sistema:

sudo nano /etc/security/limits.conf

Adicione as seguintes linhas ao final do arquivo:

www-data soft nofile 10000
www-data hard nofile 10000
www-data soft nproc 10000
www-data hard nproc 10000

Para sistemas que usam systemd, também é necessário ajustar os limites no arquivo de serviço:

sudo systemctl edit apache2

Adicione o seguinte conteúdo:

[Service]
LimitNOFILE=10000
LimitNPROC=10000

Reinicie o Apache para aplicar as alterações:

sudo systemctl daemon-reload
sudo systemctl restart apache2

Ajustando o kernel para melhor desempenho de rede

Edite o arquivo de configuração do sysctl:

sudo nano /etc/sysctl.conf

Adicione ou modifique as seguintes linhas:

# Aumenta o tamanho da fila de backlog
net.core.somaxconn = 1024

# Aumenta o número máximo de conexões TCP
net.ipv4.tcp_max_syn_backlog = 2048

# Reutilização de sockets em TIME_WAIT
net.ipv4.tcp_tw_reuse = 1

# Reduz o tempo de espera para fechar conexões
net.ipv4.tcp_fin_timeout = 15

# Aumenta o buffer de recepção
net.core.rmem_max = 16777216

# Aumenta o buffer de envio
net.core.wmem_max = 16777216

Aplique as alterações sem reiniciar:

sudo sysctl -p

Monitoramento e ajuste fino do desempenho do Apache

O monitoramento contínuo é crucial para manter o Apache otimizado. Vamos configurar ferramentas para monitorar o desempenho e realizar testes de carga.

Instalando e configurando ferramentas de monitoramento

sudo apt install htop sysstat apachetop
# ou
sudo yum install htop sysstat apachetop

Para monitoramento mais avançado, instale o Netdata:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Realizando testes de carga com ApacheBench

O ApacheBench (ab) é uma ferramenta simples para testar o desempenho do seu servidor:

sudo apt install apache2-utils
# ou
sudo yum install httpd-tools

Execute um teste básico:

ab -n 1000 -c 100 http://seu-servidor/

Este comando simula 1000 requisições com 100 conexões concorrentes. Analise os resultados para identificar gargalos.

Usando o Apache2Buddy para análise automática

O Apache2Buddy é uma ferramenta que analisa sua configuração e sugere melhorias:

curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl

Siga as recomendações fornecidas pela ferramenta para otimizar ainda mais seu servidor.

Problemas comuns e como resolver

Sintoma: Alto consumo de memória

Causa: Configuração inadequada do MaxRequestWorkers ou uso do MPM Prefork.
Solução: Mude para o MPM Event e ajuste o MaxRequestWorkers com base na fórmula: (RAM disponível em MB - RAM para SO) / 15MB por worker. Por exemplo, para um VPS com 4GB, um valor entre 80-120 é geralmente adequado.

Sintoma: Servidor lento durante picos de tráfego

Causa: Configuração inadequada de threads e conexões simultâneas.
Solução: Aumente o ThreadsPerChild e MaxSpareThreads, mas mantenha o MaxRequestWorkers dentro dos limites de memória. Considere também implementar um sistema de cache como Varnish para aliviar a carga do Apache durante picos.

Sintoma: Erros 503 Service Unavailable

Causa: O servidor atingiu o limite de conexões simultâneas.
Solução: Aumente o valor de MaxRequestWorkers e ServerLimit, mas certifique-se de que seu VPS tem memória suficiente. Também verifique os limites do sistema operacional com ulimit -a e ajuste conforme necessário.

Sintoma: Tempo de resposta lento para conteúdo estático

Causa: Falta de cache ou compressão adequada.
Solução: Ative e configure corretamente os módulos mod_expires, mod_deflate e mod_cache. Considere também usar um CDN para conteúdo estático frequentemente acessado.

Sintoma: Servidor travando após atualização de configuração

Causa: Configurações incompatíveis ou valores muito altos para os recursos disponíveis.
Solução: Verifique a sintaxe da configuração com apache2ctl configtest antes de reiniciar. Reverta para a última configuração funcional e faça alterações incrementais, testando após cada mudança.

Perguntas frequentes sobre otimização do Apache para VPS Linux

Qual MPM do Apache é mais eficiente para VPS Linux?

O MPM Event é geralmente o mais eficiente para VPS Linux moderno, pois utiliza threads em vez de processos completos, reduzindo o consumo de memória. Para sites com alto tráfego, o Event supera o prefork em eficiência de recursos e capacidade de conexões simultâneas.

Como saber se minhas configurações do Apache estão otimizadas?

Você pode verificar se suas configurações do Apache estão otimizadas usando ferramentas como ApacheBench (ab) ou Apache2Buddy para testes de carga e análise. Monitore o uso de CPU, memória e tempo de resposta com htop e netdata, e verifique os logs de erro para identificar gargalos específicos.

Quais são os valores ideais para MaxRequestWorkers no Apache?

Os valores ideais para MaxRequestWorkers dependem dos recursos do seu VPS. Uma fórmula básica é dividir a memória disponível (em MB) pelo consumo médio de cada worker (geralmente 15-30MB) e usar 80% desse resultado. Para um VPS com 4GB de RAM, um valor entre 80-120 é geralmente adequado.

O mod_cache do Apache é suficiente ou devo usar Varnish?

O mod_cache do Apache é adequado para caching básico e sites com tráfego moderado. Para sites de alto tráfego ou aplicações dinâmicas complexas, o Varnish oferece melhor desempenho e recursos avançados de cache. A escolha depende da complexidade do site e do volume de tráfego esperado.

É seguro desativar módulos não utilizados do Apache?

Sim, é seguro e recomendado desativar módulos não utilizados do Apache, pois cada módulo carregado consome recursos e pode representar um risco de segurança. Use o comando 'a2dismod' para desativar módulos específicos, mas certifique-se de testar seu site após cada alteração para evitar quebrar funcionalidades.

Conclusão

  • A otimização do Apache para VPS Linux requer uma abordagem equilibrada, ajustando o MPM, configurações de memória e cache de acordo com os recursos disponíveis.
  • O MPM Event combinado com configurações adequadas de KeepAlive e limites de workers pode aumentar significativamente o desempenho sem necessidade de hardware adicional.
  • O monitoramento contínuo e ajustes periódicos são essenciais para manter o desempenho ideal à medida que o tráfego e as necessidades do site evoluem.

Precisa de ajuda com a otimização do seu servidor Apache?

Otimizar o Apache para alta performance requer conhecimento técnico e experiência. Se você precisa de um ambiente já otimizado e gerenciado por especialistas, considere nossos servidores VPS Linux pré-configurados.

Conheça nossos planos de Servidor VPS otimizados

  • 0 Usuários acharam útil
  • apache, vps, linux, performance, otimização, servidor-web, AviraHost
Esta resposta lhe foi útil?

Artigos Relacionados

Como usar o Filezilla como software FTP da minha Hospedagem?

Como usar o Filezilla como software FTP da minha Hospedagem? O FileZilla é um dos mais populares...

Conectando remotamente ao MySQL - cPanel

Você pode permitir servidores externos a acessar suas bases de dados MySQL através do IP na lista...

Como redirecionar um site http para https?

Para redirecionar um site http para https, basta adicionar as linhas abaixo no seu arquivo...

Como acessar o painel de gerenciamento dos meus Serviços.

Para acessar o painel de gerenciamento do seu serviço basta seguir o passo á passo abaixo.   1....

Como gerenciar um domínio.

Adicione um domínio a sua conta, utilizando nosso painel de gerenciar domínios, Você pode...