В моей корпоративной интрасети доступ к веб-сайтам можно получить двумя способами. Со своим псевдонимом вроде https://foo
или с их полным адресом, например https://foo.example.internal
.
Я хочу настроить свой сервер nginx, чтобы заставить пользователя использовать второй вариант. Итак, если они просматривают https://foo
, Я хочу, чтобы сервер nginx переписал адрес на https://foo.example.internal
.
Пробовал несколько вариантов:
http {
server {
server_name foo;
# Test 1
rewrite ^https://foo/(.*)$ https://foo.example.internal/$1;
# Test 2
rewrite ^/foo/(.*)$ https://foo.example.internal/$1;
# Test 3
rewrite ^/(.*) https://foo.example.internal/$1;
}
}
Test1
и Test2
не имеет никакого эффекта (т.е. пользователь может получить доступ к веб-сайту через https://foo
или https://foo.example.internal
), пока Test3
перезаписывает ли https://foo
к https://foo.example.internal
но последняя не работает (сервер nginx ничего не возвращает, я подозреваю, что в этой перезаписи URL есть какой-то цикл).
Итак, как я могу заставить nginx переписать https://foo
к https://foo.example.internal
?
Спасибо
Наконец нашел проблему. Рабочее решение делается установкой 2-х серверов:
http {
server {
server_name foo;
listen 443 ssl;
return 301 https://foo.example.internal$request_uri;
}
server {
server_name foo.example.internal;
listen 443 ssl;
# rest of configuration
}
}