Melhor maneira de impedir o servidor padrão?

26

Eu tenho vários vhosts e gostaria de "desativar" o vhost padrão, seja por página em branco, página de erro ou geralmente o uso mais eficiente dos recursos do Nginx, permitindo apenas que outros vhosts tenham acesso via domínios predefinidos.

DanH
fonte

Respostas:

42

Defina um default_server que retorne um código HTTP 444 :

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

(Retornar um código de erro 4xx significa que as solicitações podem ser interpretadas por um cliente como uma solicitação malsucedida, em vez de uma página em branco HTTP 200, mas totalmente confiável, confie em mim .)

Rob Howard
fonte
2
444 é um nginx não-padrão código específico: "código não-padrão de um nginx especial 444 é devolvido que fecha a conexão"
bzeaman
2
Isso não funciona para https. Uma simples escuta 443 default_server não funcionará, pois o handshake ssl acontece primeiro e o nginx irá errar antes de retornar 444. Uma solução que ainda tenho que tentar, mas que deve funcionar, é criar um certificado autoassinado para o servidor https padrão e, opcionalmente, redirecione para http para evitar erros no navegador.
Simon Bengtsson
O ticket nginx para fornecer uma boa maneira de recusar conexões SSL está aqui . Eles também fornecem uma solução alternativa , configuração ssl_ciphers aNULL;.
NH2
Note-se a solução que eu mencionei vai quebrar clientes HTTPS não-SNI-capazes (como nginx própria proxy_pass, a menos que você definir proxy_ssl_server_name on;) de alcançar quaisquer outros server_names(tão essencialmente quebrar as legítimas server_names para a porta 443 que você não quer deixar passar). Consulte trac.nginx.org/nginx/ticket/195#comment:11 para obter detalhes.
NH2
4

Basta definir o vhost padrão que apontará para o diretório com o arquivo index.html em branco.

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

e coloque o índice em branco em / var / www / placeholder

wojciechz
fonte
ele captura todas as solicitações que não atingem nenhum nome de domínio e resposta com página em branco.
Wojciechz 23/08/2012
Você não pode apenas em return '';vez de root...index?
oriadam 23/08
0

por que não negar tudo

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}
Joel Ma
fonte