я делал каскадные map-ы (когда переменная задается через переменную, задаваемую другим map-ом).
но решение далеко от идеального 1) требуется правка конфигов и релоад 2) очень сложно прикручивается эквивалент set_real_ip_from возможно, в каком-то приближении, именно за счет маркера "запрос пришел с прокси" или "запрос пришел не с прокси" можно сделать нужный вам map вс, 4 июн. 2023 г. в 20:40, Gena Makhomed <g...@csdoc.com>: > Здравствуйте, All! > > Есть такая конфигурация: > > (1) client ==> vps_server ==> main_server > > (2) client ==> cloudflare => vps_server ==> main_server > > vps_server слушает на 80 и 443 портах и через модуль stream проксирует > запроcы на main_server через tcp, передавая на main_server информацию > о реальном IP клинта через proxy_protocol. Все SSL сертификаты > и конфигурации сайтов хранятся при этом только на main_server. > > В первом случае для получения реального IP клиента - в блоке > server надо прописать: > > set_real_ip_from 11.22.33.44; # IP адрес vps_server > real_ip_header proxy_protocol; > > Во втором случае для получения реального IP клиента - в блоке > server надо прописать: > > set_real_ip_from 173.245.48.0/20; > ... > set_real_ip_from 2c0f:f248::/32; > real_ip_header CF-Connecting-IP; > > При этом - в момент включения/выключения cloudflare > для какого-то виртуального хоста - необходимо править > конфиги nginx и делать релоад конфигурации nginx. > > Можно ли без правки исходников nginx используя только функциональность > nginx и модуля njs получить автоматическое определение IP адреса клиента > вне зависимости от того, каким образом пришел запрос - или от клиента > напрямую на IP адерс vps_server, или через cloudflare proxy? > > Если без правки исходников nginx такую функциональность получить нельзя > - как лучше всего написать патч, который реализует логику работы > множественных директив set_real_ip_from и real_ip_header, > таким образом, чтобы не сломать обратную совместимость > со всеми уже существующими конфигурациями nginx? > > Может быть - лучше всего будет сделать в nginx > два варианта директивы real_ip_header - первый > вариант - как сейчас, с одним параметром, > и второй вариант - с тремя параметрами: > > real_ip_header proxy_protocol set_real_ip_from 11.22.33.44; > > real_ip_header CF-Connecting-IP set_real_ip_from 173.245.48.0/20; > > первый вариант, с одним параметром - как и раньше, может быть только > один, а второй вариант - с тремя параметрами может присутствовать в > конфигурации nginx больше одного раза. > > И если обрабатывать расширенные директивы real_ip_header в том порядке, > в котором они встречаются в конфиге - то как раз и будет автоматически > получена необходимая функциональность обработки множественных заголовков > real_ip_header, при этом будет полностью соблюдена > обратная совместимость со всеми текущими конфигурациями nginx, > потому что ни у кого в конфигах сейчас нет директивы > real_ip_header с тремя параметрами. > > Б большинтсве случаев, примерно 80-90% будет использоваться текущий > синтаксис директивы real_ip_header, но при необходимости обработки > нескольких директив real_ip_header - будет использоваться вариант > с тремя параметрами, в оставшихся 10-20% случаев. > > старый синтаксис набора директив > > set_real_ip_from 11.11.11.11; > set_real_ip_from 22.22.22.22; > set_real_ip_from 33.33.33.33; > real_ip_header X-Real-IP; > > может быть автоматически преобразован при чтении конфига > во внутреннее представление аналогичное набору директив: > > real_ip_header X-Real-IP set_real_ip_from 11.11.11.11; > real_ip_header X-Real-IP set_real_ip_from 22.22.22.22; > real_ip_header X-Real-IP set_real_ip_from 33.33.33.33; > > - так что в nginx нужно будет реализовать только один вариант кода > для обработки "расширенного" варианта конфига, с тремя директивами. > > Или существует какой-то еще лучший вариант решения этой задачи? > > -- > Best regards, > Gena > _______________________________________________ > nginx-ru mailing list > nginx-ru@nginx.org > https://mailman.nginx.org/mailman/listinfo/nginx-ru >
_______________________________________________ nginx-ru mailing list nginx-ru@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-ru