Nginx Servidor “padrão”? [duplicado]

22

Eu tenho um Nginx com vários blocos de servidores ativados. Cada servidor responde a 1 domínio canônico e pode encaminhar 1 ou mais para esse URL canônico. Tenho pelo menos um servidor (ainda não verifiquei todos eles) onde, se eu digitar um domínio inexistente que aponte para essa caixa, o Nginx exibirá um site de sua escolha (sempre o mesmo site, mas não aquele que Eu estou atrás).

Eu procurei pelo arquivo de configuração do site em que sempre estou, mas não vejo nada óbvio que possa identificá-lo como qualquer tipo de site padrão e mesmo assim, sempre aparecendo quando eu digito um URL.

Alguma ideia sobre o que eu deveria estar procurando para rastrear isso?

    
por Rob Wilkerson 19.07.2013 / 19:32

2 respostas

21

Adicione default_server à sua diretiva listen no server que você deseja que seja o padrão.

    
por 19.07.2013 / 19:35
31

Por que o nginx está fazendo isso?

A razão para isso é simples. Clientes muito antigos ou quebrados não enviam o campo de cabeçalho Host HTTP em suas solicitações e se você estiver usando blocos de servidores baseados em nome (hosts virtuais baseados em nome em termos do Apache), nginx não é capaz de determinar qual dos servidores configurados significa pelo cliente. O mesmo problema é verdadeiro para qualquer outro servidor da Web que suporte esse sistema baseado em nome. Esse problema não surgiria se você estivesse usando um sistema baseado em IP para cada domínio (o que também significa que você tem várias interfaces de rede).

Mais sobre este assunto? Como o nginx processa uma solicitação

Qual é o primeiro?

O nginx selecionará o servidor que vem em primeiro lugar se nenhum sinalizador default foi definido em qualquer diretiva listen :

server {
  server_name server1.com;
}

server {
  server_name server2.com;
}

server1.com será o padrão.

Se você incluir automaticamente os links simbólicos de sites-enabled (configuração padrão), o arquivo que vem primeiro no diretório será seu primeiro servidor.

O que posso fazer para evitar isso?

Boa pergunta e você deve evitar isso. Não há razão para suportar esses clientes antigos e absolutamente nenhum motivo para oferecer suporte a clientes com problemas. O problema é facilmente resolvido criando uma configuração padrão de captura de todos os servidores. O exemplo a seguir é de um dos meus projetos e direcionado para a versão de desenvolvimento atual do nginx (1.5.2 - mas também deve funcionar com versões mais antigas):

# /etc/nginx/sites-enabled/_.conf

# Default server for clients who do not send correct Host header.
# The underline in the file name makes sure that this file comes first in the dir.
server {
  server_name _;
  listen *:80 default_server deferred;
  return 444;
}

A configuração é cortada, mais material de configuração do nginx .

    
por 20.07.2013 / 22:40