Conteúdo em cache causando um grande número de erros 404, muitas conexões

1

Meu site não responde há três dias devido a uma grande quantidade de tráfego.

Um elemento JavaScript na página solicitava regularmente imagens do servidor e o número de conexões tornou-se um problema, pois as pessoas deixavam as janelas do navegador abertas (e, portanto, nunca paravam de solicitar as imagens).

Redesenhei o site para usar um único sprite e carregue-o apenas uma vez; No entanto, agora há uma enorme quantidade de erros 404, pois as pessoas ainda tentam carregar o conteúdo antigo. O site está em um VPS e é inutilizável devido à latência.

Para piorar a situação, inicialmente supus que a latência se devia à falta de cache. Eu adicionei uma diretiva ao arquivo .htaccess para os visitantes armazenarem recursos em cache (o código antigo e ineficiente incluído).

Meu host não conseguiu corrigir o problema. O que pode ser feito para forçar as conexões persistentes a parar de tentar carregar conteúdo obsoleto?

    
por Peter 22.12.2011 / 03:05

3 respostas

0

Um administrador do sistema no meu host resolveu com um script:

Qualquer endereço IP que tente acessar o conteúdo antigo (por natureza, esse usuário está continuamente fazendo solicitações e consumindo conexões) é imediatamente adicionado ao firewall do servidor. Até agora, apenas algumas centenas (de muitos milhares de visitantes) foram detectadas e bloqueadas. A solução está funcionando muito bem.

    
por 22.12.2011 / 15:03
3

Você não pode realmente impedir que alguém faça uma solicitação a um recurso inexistente (por exemplo, qualquer pessoa pode criar um URL para uma página que não existe e obter um erro 404). No entanto, pode haver algumas coisas que você pode fazer para melhorar a situação.

Primeiramente, altere o nome do arquivo em seu novo conteúdo - se você ainda referenciar um arquivo javascript no seu html, verifique se ele tem um nome diferente daquele com o problema, para que o navegador não use a cópia em cache.

Em segundo lugar, faça a sua página 404 o mais simples possível (definitivamente escolha uma página estática, não algo dinâmico e muito pequena).

Em terceiro lugar, o Apache não é tão eficiente ao lidar com um grande número de solicitações simultâneas sem muita memória disponível (ele lança um thread de trabalho por solicitação). Considere (pelo menos temporariamente) adicionar outro servidor na frente do Apache que manipulará as solicitações 404 de maneira mais eficiente. Alguns exemplos podem incluir:

  • nginx - ele atende as solicitações 404 (e possivelmente todos os arquivos estáticos) e proxy_passa outras solicitações de volta ao Apache (e também pode fazer o cache de solicitações de proxy)
  • Varnish - ele pode armazenar em cache a solicitação 404 e veiculá-la diretamente da memória, reduzindo a carga no Apache
por 22.12.2011 / 03:30
1

Eu começaria criando imediatamente um arquivo de zero bytes para se livrar dos 404s e minimizar o custo de cada recuperação.

    
por 22.12.2011 / 03:27