Como lidar com clientes HTTP lentos?

1

De vez em quando, um monte de clientes HTTP realmente lentos decidem sugar páginas do meu site. Isso é ruim porque, quando um número suficiente delas faz isso, reduz drasticamente o número de processos gratuitos do Apache disponíveis para lidar com solicitações do resto do mundo. Eu não sei se é um ataque DDoS coxo ou apenas clientes realmente lentos.

Em anos passados, eu sei que lingerd foi uma solução para este problema. Mas não parece haver muita atividade em torno disso nos dias de hoje. De fato, a falta de um pacote lingerd no Debian (existe um packagae não oficial antigo) sugere que existem métodos melhores.

Eu tenho usado o mod_limitipconn para lidar parcialmente com o problema, mas preciso manter esse número alto o suficiente para não penalizar navegadores normais. Isso faz com que seja uma solução semifinal. Ocorre-me que eu poderia colocar o Squid na frente do Apache, mas isso parece um pouco pesado. Ou talvez minhas impressões sobre o Squid sejam distorcidas.

De qualquer forma, estou procurando ideias ou indicações para a coisa óbvia que perdi.

Idéias?

    
por Zahir 16.07.2010 / 09:32

1 resposta

1

Se fosse um ataque DDoS, você pareceria muitas dessas conexões de vários locais. Você não dá nenhuma estatística na sua pergunta, então não podemos julgar.

Se muitas das solicitações lentas vierem do mesmo local, especialmente se forem de um objeto grande, talvez você tenha pessoas abrindo muitas conexões usando um gerenciador de downloads.

Se você não estiver bloqueado no Apache por motivos específicos, pode considerar uma mudança para um servidor baseado em uma arquitetura orientada a eventos, em vez de uma baseada em ameaça / processo, como nginx. Isso permite que o número de conexões simultâneas seja escalonado com muito mais eficiência, pois cada solicitação básica requer muito pouco recursos extras (principalmente RAM) - embora a escalabilidade em solicitações de recursos com script possa variar muito dependendo da configuração, obtendo-se a eficiência de O modPHP (a menos que você já o execute no modo CGI (faust)) pode ser mais fácil de configurar, por exemplo, e é claro que você pode estar usando outros módulos / recursos que não são bem suportados pelo Apache.

Você também pode alocar mais RAM e aumentar o número máximo de processos / threads do Apache.

A meio caminho entre essas duas soluções é que, se as solicitações lentas forem para recursos estáticos, você poderia usar o servidor web leve para servir o conteúdo estático (com muito menos RAM do que o Apache) e fazer proxy das solicitações com script (e outro requer os recursos extras além de apenas servir um arquivo) para a configuração do Apache. Muitos sites com grandes cargas pesadas operam de maneira semelhante a isso.

Não sei de um método que limita a quantidade de tempo que uma única solicitação pode levar - isso provavelmente não resolveria seu problema, porque em uma situação de DoS ou no caso de gerenciadores de download, nova conexão será imediatamente tentada.

    
por 16.07.2010 / 11:13

Tags