[proposal] SERVER_NAME в fastcgi_params

Nikolay Shaplov dhyan на nataraj.su
Вс Мар 5 15:41:17 UTC 2023


Приветствую! 

Разбираясь с cgi-скриптом обслуживающим многочисленные доменные имена 
столкнулся со следующей проблемой:

В /etc/nginx/fastcgi_params написано

fastcgi_param  SERVER_NAME        $server_name;

При этом в самом конфиге сайта server_name не указан, сервер обслуживает все 
доменные имена (фильтрация по имени осуществляется на фронтэнде).

Скрипту, тем ни менее нужно знать доменное имя которое он сейчас обслуживает, 
и он смотрит на переменную окружения SERVER_NAME. 

А в этой переменной пусто. Потому что в $server_name тоже пусто. Я подозреваю 
что это как-то завязано на пустой server_name в конфиге.

RFC же требует чтобы SERVER_NAME был корректно установлен всегда:
https://tools.ietf.org/html/rfc3875#section-4.1.14 

Я локально решил эту проблему использовав $http_host в качестве источника 
доменного имени. На практике он определен всегда (хотя в теории может быть 
только для http >= 1.1 это я не проверял):

fastcgi_param  SERVER_NAME        $http_host;

Но это некоторые полумеры которые не решают проблему глобально...
Надо либо починить $server_name чтобы он был установлен всегда, либо 
использовать $http_host для задания переменной окружения SERVER_NAME, либо 
какая-то более сложная комбинация.

Если авторы заинтересованы в решении этой проблемы, я могу провести 
дополнительные исследования, подготовить тестовые примеры демонстрирующиее это 
поведение и т.п. (В исходный код nignx наверное глубоко лезть не готов, хотя 
квалификация позволяет, не знаком я с ним совсем).

Если авторы не заинтересованы... Значит придется везде в инструкциях тащить за 
собой эту уродливую конструкцию с $http_host...

-- 
Nikolay Shaplov aka Nataraj
Fuzzing Engineer at Postgres Professional
Matrix IM: @dhyan:nataraj.su
----------- следующая часть -----------
Вложение не в текстовом формате было извлечено…
Имя: signature.asc
Тип: application/pgp-signature
Размер: 488 байтов
Описание: This is a digitally signed message part.
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20230305/9029aabc/attachment.bin>


Подробная информация о списке рассылки nginx-ru