У меня есть 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 разных имени_сервера в качестве псевдонима. Они не предназначены для обслуживания разных страниц / веб-сайтов.
Вот ваша запись:
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;