Eu uso nginx para servir meu site. Eu gostaria de bloquear todas as solicitações que chegam com um cabeçalho HTTP “Host” que não corresponde ao domínio do meu site.
Para ser mais concreto, meu nginx.conf contém esses dois blocos de servidor:
server {
# Redirect from the old domain to the new domain; also redirect
# from www.newdomain.com to newdomain.com without the "www"
server_name www.olddomain.com olddomain.com www.newdomain.com;
listen 80;
return 301 $scheme://newdomain.com$request_uri;
}
server {
server_name newdomain.com localhost;
listen 80;
# Actual configuration goes here...
}
Eu gostaria de bloquear (ou seja, “retornar” um código de status 444) qualquer tráfego cujo host não seja www.olddomain.com, olddomain.com, www.newdomain.com ou newdomain.com. Como posso fazer isso?
Definir um servidor padrão
se você não definir explicitamente um servidor padrão, o nginx usará implicitamente o primeiro servidor encontrado . então, basta criar um bloco de servidor para bloquear hosts desconhecidos :
(não, não é necessário adicionar um server_name - já que nunca será uma correspondência).
Curiosamente, eu tinha "-" como cabeçalho do host algumas vezes e isso parece não ser detectado pela resposta do @ AD7Six (?). Pelo menos no meu caso não funcionou.
Então eu modifiquei um pouco esta entrada de blog de spam de referência e funciona como um encanto:
Não sei se esta é a melhor solução, mas mantém os robôs afastados do meu site.