Reescrever errado ou mal configurado pelo nginx 1.8

1

Eu tenho os arquivos conf de dois nginx ssl.conf e default.conf sob /etc/nginx/conf.d/ . O primeiro arquivo lida com a solicitação HTTP recebida. Ele reescreve a solicitação http para https. E o arquivo ssl.conf manipula a solicitação baseada em https.

Abaixo está como, default.conf parece

server {
    listen       80 default_server;
    server_name  abc.example.com 123-abc.example.com;

    port_in_redirect off;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


    set_real_ip_from 127.0.0.1;
    set_real_ip_from 10.0.0.0/8;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;   

    location /about {
      root /usr/share/nginx/html;
      add_header X-Frame-Options "DENY";
      try_files $uri /about.html;
    }

    location /webapi {
      add_header X-Frame-Options "DENY";
    }

    location / {
      rewrite        ^ https://$server_name$request_uri? permanent;
    }
}

O problema aqui é abc.example.com/to/some/path reescreve para https://abc.example.com/to/some/path Este é o resultado esperado.

Mas

123-abc.example.com/to/some/path também reescreve para https://abc.example.com/to/some/path e NÃO para https://123-abc.example.com/to/some/path

Eu estou tentando ter 2 URLs que funcionam da mesma maneira, definindo 2 server_names diferentes como alias. Eles não são projetados para servir páginas / sites diferentes.

    
por OK999 05.11.2015 / 23:51

1 resposta

0

Aqui está sua reescrita:

      rewrite        ^ https://$server_name$request_uri? permanent;

O problema é que você usou $server_name , que não é o nome do host HTTP que o navegador solicitou, mas o primeiro server_name definido no bloco server .

Para corrigir isso, altere para $http_host , que é o nome do host solicitado pelo navegador.

      rewrite        ^ https://$http_host$request_uri? permanent;

Melhor ainda, não use rewrite . É suficiente para return 301 .

      return 301 https://$http_host$request_uri$is_args$args;
    
por 06.11.2015 / 00:21

Tags