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