Outras opções

A opção “MaxRequestsPerChild”, incluída logo depois no arquivo, limita o número de requisições que cada processo do Apache pode responder antes de ser encerrado e substituído por outro. Ela não tem um efeito direto sobre o desempenho, servindo apenas como uma proteção contra eventuais vazamentos de memória, que pudessem fazer o processo crescer até ocupar toda a memória do servidor. Uma boa configuração é o valor “1000”, que evita que os processos sejam fechados muito freqüentemente (o que prejudicaria o desempenho), mas ao mesmo tempo faz com que a opção atenda a seu propósito:

MaxRequestsPerChild 1000
 

Como de praxe, a solução definitiva para melhorar o desempenho do servidor, permitindo que ele atenda a mais requisições simultâneas, é instalar mais memória RAM, de forma que ele possa manter mais instâncias do Apache carregadas na memória e possa fazer mais cache de disco (reduzindo o volume de operações de leitura no HD). É importante monitorar constantemente o uso de memória do servidor e atualizar o servidor conforme necessário.

Outra opção que afeta negativamente o desempenho é a “HostNameLookups”, que faz com que o Apache verifique a origem de cada acesso, fazendo uma busca de domínio. Ativar essa opção permite criar estatísticas de acesso mais detalhadas, incluindo os países e provedores de acesso usados pelos visitantes, mas tem um impacto negativo muito grande na performance de um servidor congestionado. No Apache 2 ela já vem desativada por padrão, mas em versões antigas era necessário desativá-la manualmente:

HostNameLookups Off
 

Se você faz questão de gerar estatísticas de acesso detalhadas, pode obter o mesmo resultado usando o “logresolve”, um aplicativo que realiza as operações de resolução de nomes diretamente nos arquivos de log. Você pode criar um script para fazer com que ele seja executado uma vez por dia, por exemplo. A sintaxe do comando é a seguinte:

# logresolve -s access.stats -c < access.log > access_log.new

No exemplo, o “access.log” é o arquivo original de log, o “access_log.new” é o arquivo modificado que será gerado e o “access.stats” é o arquivo onde serão salvas as estatísticas.

Continuando, se o seu servidor já está operando no limite, recebendo mais requisições do que consegue atender nos horários de pico, uma foma simples de reduzir o carregamento do servidor é ajustar a opção “KeepAliveTimeout”, que determina o tempo que os processos do Apache devem aguardar por novas requisições do mesmo cliente antes de serem finalizadas.

A idéia por trás dessa opção é permitir que a mesma conexão TCP seja usada para enviar diversos arquivos, se possível toda a página que está sendo carregada, incluindo as imagens. Com isso, o tempo de carregamento é reduzido (já que não é mais necessário abrir uma nova conexão para cada elemento da página a ser carregado) e os processos do Apache ficam logo livres para responder a outras requisições.

O default são 15 segundos, o que é um valor seguro, já que mesmo as conexões mais lentas não chegam a ter um tempo de latência tão alto. O problema é que o tempo de espera faz com que os processos fiquem ativos na memória por até 15 segundos a mais do que realmente precisariam, consumindo memória e reduzindo o número de clientes simultâneos que o servidor pode atender.

Você pode aumentar de forma considerável o volume de requisições atendidas pelo servidor reduzindo o valor de 15 para 3 segundos. Um exemplo de configuração completa é:

KeepAlive On
MaxKeepAliveRequests 180
KeepAliveTimeout 3
 

A opção “KeepAlive On” deve estar presente, já que é ela a responsável por ativar o recurso. A opção “MaxKeepAliveRequests” determina o número máximo de conexões que devem ser mantidas ativas. Ela deve ser setada com um valor um pouco mais baixo que o da opção “MaxClients”, que vimos anteriormente.

Concluindo, você pode simular tráfego no seu servidor, verificando como ele se comporta com níveis variados de tráfego usando o comando “ab”, que faz parte do pacote “apache2-utils”. Chame-o indicando o número de requisições simultâneas e a página que será carregada, como em:

$ ab -n 1000 -c 20 http://www.meusite.com/teste.php

Nesse exemplo, estamos fazendo 1000 acessos à página, mantendo 20 requisições simultâneas. Se possível, lance o teste a partir de outro servidor com link rápido, ou peça para vários amigos rodarem o comando simultaneamente, cada um usando sua própria conexão. Isso transformará o teste em algo mais parecido com uma situação normal, onde o servidor receba um pico de acessos.

Uma opção que não tem a ver com o desempenho, mas que ajuda a reduzir o volume de ataques casuais contra o seu servidor é a opção “ServerTokens”. Na maioria das distribuições, ela vem configurada com o valor “Full”, que faz com que seu servidor disponibilize informações detalhadas sobre a versão do apache e os módulos utilizados, como “Apache/2.2.3 Debian PHP/5.2.0-8etch11”, o que facilita bastante o trabalho dos atacantes. Você pode evitar isso configurando a opção com o valor “Prod”, que faz com que o servidor responda apenas “Apache”, sem nenhum detalhe adicional (caso a linha não esteja presente, basta adicioná-la no final do arquivo):

ServerTokens Prod
 

Outra configuração importante é bloquear o acesso a includes e arquivos de configuração em geral colocados dentro dos diretórios de dados do site. Isso evitará que arquivos .inc, .tpl, .sql e de outras extensões tipicamente usadas em arquivos de configuração e em includes usados na montagem das páginas possam ser acessados diretamente pelos visitantes. Para isso, inclua na configuração uma seção “filesmatch”, especificando as extensões cuja exibição deve ser bloqueada, como em:

<filesmatch “.(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|sh|theme|module)$”>
Deny from all
</filesmatch>
 

Depois de terminar a edição do arquivo “/etc/apache2/apache2.conf”, não se esqueça de aplicar as alterações usando o comando:

# /etc/init.d/apache2 reload

ou:

# service httpd reload

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X