Hello! On Sun, Jun 04, 2023 at 09:40:17PM +0300, Gena Makhomed wrote:
> Здравствуйте, 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; Если у вас в обоих случаях vps_server проксирует всё через stream с proxy_protocol, то на принимающей стороне вам в любом случае надо сначала достать реальный адрес клиента из proxy_protocol. А уже потом смотреть в заголовки (или не смотреть, если на vps_server пришли не с IP-адресов Cloudflare). То есть, фактически, для корректной работы такой схемы - нужен "real_ip_recursive on;" (http://nginx.org/r/real_ip_recursive) и заголовок со списком нужных адресов. Сейчас из коробки такое можно сделать дополнительным проксированием с установкой заголовка. Для стандартного заголовка X-Forwarded-For, благо Cloudflare его ставит, конфигурация будет выглядеть как-то так: server { listen 8080 proxy_protocol; set_real_ip_from <vps>; real_ip_header proxy_protocol; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 8081; set_real_ip_from 127.0.0.1; set_real_ip_from <cloudflare>; real_ip_header X-Forwarded-For; real_ip_recursive on; ... } [...] > Или существует какой-то еще лучший вариант решения этой задачи? Я периодически думаю о том, чтобы научить модуль realip брать список IP-адресов не из заголовка, а непосредственно из переменной. Тогда необходимость в дополнительном проксировании в подобных странных конфигурациях отпадёт. Но в целом это выглядит как достаточно маргинальный use case, IMHO, и доступное сейчас решение с дополнительным проксированием ему плюс-минус адекватно. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-ru