Приветствую!
Разбираясь с 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
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru