Nos últimos quatro meses, mais ou menos, tenho tido um problema enorme com erros 500 em meu site. E, embora eu esteja em meu site algumas horas por dia, a quantidade de 500s que meus visitantes devem ter visto é provavelmente enorme. E isso é um problema. Um problema grande e irritante. A seguir, detalhamos a situação do início à solução, portanto, continue lendo se o senhor quiser saber como tudo aconteceu.
Os sintomas
Como eu sabia que havia um problema e que não seria uma solução fácil? Bem…
- Os 500s estavam sendo vistos em davidwalsh.name e dwf.tw (meu URL curto / redirecionador)
- Embora às vezes uma página fosse exibida, as imagens e outros ativos chegavam a 500
- Aparentemente, não havia um padrão – às vezes eu era rápido, outras lento, outras apenas 500
- Executei um relatório do Google Page Insights para ver se o problema era apenas algo que eu estava vendo, e o Google relatou um erro 500. Isso não é bom.
Então, tudo isso começou a acontecer cada vez com mais frequência. E eu estava muito confuso.
As variáveis
Foi realmente difícil apontar uma questão específica que poderia ter introduzido os 500s.
- Naquela época, eu havia acrescentado mais gzipping avançado ao site. Eu sabia mais ou menos o que estava fazendo e segui as instruções do meu host (Templo da Mídia) instruções sobre como fazer isso.
- Fiz o upgrade para o WordPress 4
- O Media Temple tinha acabado de atualizar meu servidor
- O tráfego do blog aumentou cerca de 10%
- Plugins do WordPress (preciso dizer mais?)
Todas essas coisas estavam acontecendo, então o que eu poderia apontar facilmente? Nada.
O que eu fiz
Como sempre, tentei resolver o problema sozinho usando o processo de eliminação.
- Desativei todos os plug-ins marginais do WordPress
- Removi a diretiva gzip que havia adicionado ao servidor
- Analisei ainda mais todos os meus ativos
- Removi as diretivas que não eram críticas para a missão do meu arquivo .htaccess
E mesmo assim nada disso adiantou. Continuo vendo erros 500 a torto e a direito. WTF.
O Templo da Mídia (em sua maior parte) ao resgate
Nesse ponto, precisei entrar em contato com a Media Temple: Não sou administrador de servidor e o problema estava claramente além do meu alcance. Portanto, a série de comunicações com a Media Temple foi a seguinte.
- Primeiro me disseram que não podiam reproduzir o erro, o que me levou a um caminho de fúria
- Em seguida, fui orientado a examinar o error_log, o que me deixou irritado. O log continha várias advertências, avisos e alguns erros, mas nada que pudesse derrubar meu site como estava fazendo.
- Eles então fizeram um diagnóstico do site para mim… mas no servidor errado (antigo). Ugh. Não fiquei satisfeito com isso, mas como estávamos chegando a algum lugar, não me importei com o fato de eles reiniciarem no servidor mais novo.
- O Media Temple investigou mais a fundo, atendendo às minhas súplicas chorosas, e finalmente encontrou o problema: Eu estava sendo alvo de DDOS da China. Em uma tarde de domingo, quando o tráfego é sempre baixo, havia 2.500 (!) conexões abertas ao meu site. Aparentemente, eu também estava sendo linkado por um site muito popular. Droga.
Então, é isso: ser alvo de DDOS com certeza matará seu site. E agora?
500 Prevenção e progresso
Aqui está o plano de jogo para seguir em frente:
- Por US$ 79, a Media Temple instalou o fail2ban, um utilitário que detecta tentativas mal-intencionadas e proíbe os infratores. Recebo um e-mail para cada proibição e, até agora, recebi duas dúzias. A maioria são tentativas mal-intencionadas, mas algumas delas foram banimentos de logins falhos do WordPress… da Turquia. Os melhores US$ 79 que já gastei (provavelmente não é verdade).
- O Media Temple também instalou o (D)DOS Deflate. “Este programa proibirá ataques DDoS baseados em conexão quando o limite de conexão de {x} conexões de um endereço IP for excedido. Essa proibição permanecerá em vigor por 30 minutos após cada ocorrência.”
- O Media Temple também mudou minha porta SSH/SFTP – uma boa medida que eu gostaria de ter pensado
- Vou começar a usar uma CDN novamente. Parei de usar uma porque a CDN demorava muito para ser atualizada quando eu estava desenvolvendo um tema pesado, mas usar uma CDN evitará problemas de hotlinking.
- Por diversão, também adicionei prevenção de hotlink em meu arquivo .htaccess:
# F*** hotlinkers <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?davidwalsh.name [NC] RewriteRule \.(js|css)$ - [NC,F,L] </IfModule>
Observe que eu não adicionei arquivos de imagem porque quero que o Twitter, o Facebook e outras redes sociais os peguem em cartões do Twitter, etc
Considerações finais
Algumas opiniões e ideias para encerrar meu post:
- Preciso parar de pensar que os problemas se resolverão sozinhos – eu deveria ter atacado isso antes. Minhas desculpas a todos os senhores.
- Reserve um tempo para proteger suas coisas – isso leva apenas algumas horas e pode poupar muito sofrimento a todos.
- Isso vai me fazer parecer uma diva de classe mundial, mas vou dizer mesmo assim: quando patrocinar um blogueiro, e o senhor sabe que todos sabem que o blogueiro o usa, faça um grande esforço para garantir que tudo esteja certo. Configure um servidor rápido, ofereça um bom suporte. A Media Temple e eu chegamos lá no final, mas a tediosidade da situação foi frustrante.
- Eu ainda amo o Media Temple
- Por favor, não me faça DDOS
Obrigado pela leitura e boa sorte em suas próprias lutas!
Como eu parei com o spam de comentários do WordPress
Adoro quase todas as partes de ser um blogueiro de tecnologia: aprender, pregar, brincar, pesquisar. A única parte do blog que eu absolutamente detesto: lidar com comentários de SPAM. Nos últimos dois anos, meu blog registrou mais de 8.000 comentários de SPAM por dia. POR DIA. Inchando meu banco de dados…
DWRequest: MooTools 1.2 AJAX Listener & Message Display
Embora o MooTools 1.2 esteja em seu segundo estágio beta, sua sintaxe básica e as mudanças teóricas já foram definidas. A biblioteca JavaScript continua a melhorar e a se tornar mais flexível. O colega DZone Zone Leader Boyan Kostadinov escreveu um artigo muito útil detalhando como o senhor pode adicionar um…
Atributo de espaço reservado do HTML5
O HTML5 introduziu muitos recursos no navegador, alguns baseados em HTML, outros na forma de APIs JavaScript, mas todos úteis. Um dos meus favoritos é a introdução do atributo
placeholder
para os elementos INPUT. O atributoplaceholder
mostra o texto em um campo até que o…