Apache: força as conexões HTTP 1.1 ou Persistent / KeepAlive para solicitações HTTP 1.0

5

Eu quero forçar as conexões Keep Alive ou Persistent para todas as solicitações HTTP no meu servidor Apache 2.2.3 em execução no RHEL 5.8. Muitos rastreadores da Web estão usando o HTTP 1.0 por algum motivo, e eu gostaria de forçar conexões persistentes ou de alguma forma forçar essas conexões a usar o HTTP 1.1 para que a configuração Manter Vivo Ligado na configuração do Apache cause HTTP persistente. Isso porque eu quero reduzir o número de conexões TCP sendo abertas. Como posso conseguir isso?

    
por usedTobeaMember 05.04.2014 / 18:12

2 respostas

1

O HTTP 1.0 não suporta keep-alive (conexões persistentes do AKA) e não há nenhum sistema para pedir que eles usem o HTTP 1.1, você poderia retornar 400x, mas eles ainda teriam criado uma conexão e não há uma maneira padrão para dizer-lhes para tentar HTTP 1.1 em seu lugar. Mesmo que todos os seus clientes trabalhem, eles precisam do HTTP1.1. Não há nada que você possa fazer no serviço para impedir que eles enviem o "fechamento" no cabeçalho de manutenção ou desconectem a conexão e ainda façam uma única conexão por solicitação.

Existem algumas opções de kernel Linux (especificamente DEFER_ACCEPT e TIME_WAIT ) que podem ajudar a reduzir a tabela de conexão TCP, mas eu não recomendaria seguir essa rota a menos que você saiba o que está fazendo, pois é muito fácil piorar as coisas em vez de melhorar.

Mas pensando mais amplamente, acho que você está tentando resolver o problema de maneira errada. A internet está escura e cheia de terrores, Se bots aleatórios estão lhe causando problemas de limite de conexão TCP, então você está desesperado vulnerável a inundações SYN ou outros eventos e bots do tipo DDOS são apenas um sinal de que seu servidor está subescalado, sob ataque ou mal configurado. De qualquer forma, algo está errado.

Se você realmente quiser controlar que tipo de solicitações chegará ao apache, precisará de um WAF (firewall de aplicativo da web) ou do balanceador de carga na frente do apache para filtrar solicitações incorretas antes de consumirem conexões dispendiosas do apache. Em muitos casos, você também pode descarregar o trabalho intensivo da CPU na criptografia SSL / TLS.

Eu sei que isso não é uma solução rápida ou a resposta que você está procurando, mas seja qual for o problema, é muito pouco comum resolvê-lo seguindo esse caminho.

    
por 10.08.2016 / 07:46
0

Você pode simplesmente definir KeepAliveTimeout como um número alto.

Aqui está a entrada manual para esta diretiva: link

Observe que "Configurar KeepAliveTimeout para um valor alto pode causar problemas de desempenho em servidores altamente carregados. Quanto maior o tempo limite, mais processos do servidor serão mantidos ocupados aguardando conexões com clientes inativos."

    
por 23.04.2014 / 02:13