server_name_in_redirect?
Maxim Dounin
mdounin на mdounin.ru
Пт Ноя 1 16:27:40 UTC 2019
Hello!
On Fri, Nov 01, 2019 at 10:57:32AM -0400, opan wrote:
> Добрый день.
>
> Есть следующая конфигурация сервера:
>
> server {
> listen 80; ## listen for ipv4
> listen 443 default_server ssl;
>
> server_name localhost;
> server_name_in_redirect off;
>
> location = /loc {
> if ($scheme = http) {
> return 301 https://$server_name$request_uri;
> }
>
> ...
> Мы ожидаем что все запросы, которые попадают в этот пустой server_name,
> будут перенаправляться на https://$host/loc/$request_uri, так как есть
> директива: server_name_in_redirect off; Однако запросы перенаправляются
> на https://localhost/loc/$request_uri
>
> Из документации такое поведение не удалось понять. Можете пояснить,
> пожалуйста, как правильно пользоваться это директивой?
Директива server_name_in_redirect влияет только на то, что будет
испольвоваться в host-части перенаправлений, которые возвращает
сам nginx (а равно в случаях, когда nginx преобразует
перенаправления к абсолютным).
В приведённом же случае - в перенаправлении явно используется
$server_name, и результат будет ровно такой, как написано,
значение директивы server_name_in_redirect никак на это не влияет.
Если вы хотите, чтобы возвращалось перенаправление на https://$host - так
и напишите в конфиге.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru