Здравствуйте, 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