Welcome! Log In Create A New Profile

Advanced

Re: множественные директивы real_ip_header

Maxim Dounin
June 09, 2023 02:30AM
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
Subject Author Posted

множественные директивы real_ip_header

Gena Makhomed June 04, 2023 02:42PM

Re: множественные директивы real_ip_header

Илья Шипицин June 05, 2023 06:08AM

Re: множественные директивы real_ip_header

Gena Makhomed June 05, 2023 11:48AM

Re: множественные директивы real_ip_header

Илья Шипицин June 06, 2023 06:56AM

Re: множественные директивы real_ip_header

Илья Шипицин June 06, 2023 07:02AM

Re: множественные директивы real_ip_header

Gena Makhomed June 06, 2023 04:20PM

Re: множественные директивы real_ip_header

Илья Шипицин June 06, 2023 06:02PM

Re: множественные директивы real_ip_header

Maxim Dounin June 09, 2023 02:30AM

новая версия модуля ngx_http_realip_module

Gena Makhomed June 11, 2023 07:32PM

Re: новая версия модуля ngx_http_realip_module

Maxim Dounin June 11, 2023 09:28PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 168
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready