nginx serve todos os domínios, exceto um

0

Eu tenho uma instalação padrão do nginx no Ubuntu 12.04. Eu quero apenas um subdomínio para servir. Todos os outros devem retornar 404.

Eu defini dois sites:

0-default:

server {
  listen *:80 default_server;
  listen [::]:80 default_server ipv6only=on;
  listen *:443 default_server ssl;
  listen [::]:443 default_server ssl ipv6only=on;

  return 404;

  ssl_certificate /etc/nginx/ssl/mydomain.com.pem;
  ssl_certificate_key /etc/nginx/ssl/mydomain.com.key; 

  server_name _ *.mydomain.com mydomain.com;
}

1-site:

server {
  listen sub.mydomain.com:443;

  ssl                  on;
  ssl_certificate      /etc/nginx/ssl/sub.mydomain.com.pem;
  ssl_certificate_key  /etc/nginx/ssl/sub.mydomain.com.key;

  root /var/www/sub;
  index index.html index.htm;

  server_name sub.mydomain.com;
}

Mas o 1-site serve todos os domínios na porta 443, não apenas sub.mydomain.com e não é servido por 0-padrão.

Como eu poderia alcançar o comportamento desejado?

    
por Christian 27.02.2014 / 17:10

2 respostas

1

Agora eu tenho explicação.

O servidor de 1 site escuta ip:port enquanto o site de defaut escuta apenas port . Quando o nginx escolhe qual bloco de servidor usar, ele prefere a correspondência mais aproximada, e ip:port é melhor do que port . E somente depois que o nginx de peneiramento irá comparar nomes de servidores, mas neste caso é tarde demais. Ele já é apenas um candidato.

Após o alinhamento do seu escopo, eles são todos "equidistantes" do pedido.

    
por 28.02.2014 / 06:13
0

Eu poderia resolvê-lo, alinhando as declarações de escuta.

Portanto, as minhas declarações de escuta são agora apresentadas da seguinte forma:

0-default:

 listen 80 default_server;
 listen 443 default_server ssl;

1-site:

 listen 443;

O subdomínio no comando listen pareceu confundir o nginx.

    
por 27.02.2014 / 20:34