Неправильная или неверно настроенная перезапись в nginx 1.8

У меня есть 2 файла конфигурации nginx ssl.conf и default.conf в разделе / etc / nginx / conf. d / . Первый файл обрабатывает входящий HTTP-запрос. Он перезаписывает http-запрос на https. И файл ssl.conf обрабатывает запросы на основе https.

Ниже показано, как default.conf выглядит так

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;
    }
}

Проблема в том, abc.example.com/to/some/path переписывается на https://abc.example.com/to/some/path Это ожидаемый результат.

Но

123-abc.example.com/to/some/path также переписывается на https://abc.example.com/to/some/path , а НЕ на https://123-abc.example.com/to/some/path

Я пытаюсь получить 2 URL-адреса, которые работают одинаково, установив 2 разных имени_сервера в качестве псевдонима. Они не предназначены для обслуживания разных страниц / веб-сайтов.

1
задан 6 November 2015 в 00:51
1 ответ

Вот ваша запись:

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

Проблема в том, что вы использовали $ server_name , которое не является именем хоста HTTP, запрошенным браузером, а первым server_name определен в блоке server .

Чтобы исправить это, измените его на $ http_host , которое является именем хоста, запрошенным браузером.

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

Еще лучше, не надо. Я вообще не использую перезаписываю . Достаточно вернуть 301 .

      return 301 https://$http_host$request_uri$is_args$args;
0
ответ дан 4 December 2019 в 06:53

Теги

Похожие вопросы