Re: обработка set_real_ip_from для 400-х статусов

2019-07-29 Пенетрантность Maxim Dounin
Hello!

On Fri, Jul 26, 2019 at 10:56:35AM +0300, Иван Мишин wrote:

> Столкнулся с такой же проблемой. Есть какое-то объяснение этому?

[...]

> > curl --header "X-Real-IP: 8.9.10.11" - -I  -k http://localhost/test
> > curl --header "X-Real-IP: 8.9.10.11" - -I  -k http://localhost/%
> >
> > получаю
> >
> > # cat /var/log/nginx/access.log
> > 8.9.10.11 8.9.10.11 200 /test
> > 127.0.0.1 - 400
> >
> >
> > почему магия с форматом лога и хедерами работает на 200-х статусах и не
> > работает на 400-х ? это такая задумка ? выглядит как баг.

Запрос к "/%" распарсить невозможно, так как сочетание "%%" 
недопустимо по стандартну HTTP.  Соответственно ошибка возникает 
уже на этапе парсинга request line, и ни о какой обработке такого 
запроса речи не идёт.  Соответственно не будет работать и 
realip-модуль.

Более того - в данном конкретном случае, так как ошибка возникает 
на этапе парсинга request line, то в тех ошмётках запроса, которые 
nginx успел распарсить - заголовка X-Real-IP не будет.  То есть 
в данном случае даже если бы модуль realip что-то попытался 
сделать с запросом - у него ничего бы не получилось.  А равно 
ничего не получится увидеть при логгировании $http_x_real_ip.

Отдельно отмечу, что с точки зрения логики работы - текущее 
поведение выглядит как наиболее правильное.  Если с IP-адреса 
приходит невалидный HTTP-запрос, то даже если этот адрес вдруг 
значится в set_real_ip_from - логгировать надо именно адрес, с 
которого нам прислали этот невалидный запрос, потому как 
разбираться надо именно с тем софтом, что на этом адресе стоит и 
невалидный запрос сформировал.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: обработка set_real_ip_from для 400-х статусов

2019-07-26 Пенетрантность Иван Мишин
Столкнулся с такой же проблемой. Есть какое-то объяснение этому?

пт, 14 июн. 2019 г. в 20:12, Илья Шипицин :

> привет!
>
> стенд:
>
> nginx-1.17.0 из официального репо.
> конфиг
>
> user  root;
> worker_processes  1;
>
> error_log  /var/log/nginx/error.log warn;
> pid/var/run/nginx.pid;
>
> events {
> worker_connections  1024;
> }
>
>
> http {
> include   /etc/nginx/mime.types;
> default_type  application/octet-stream;
>
> log_format  custom  '$remote_addr\t$http_x_real_ip\t$status\t$uri';
> set_real_ip_from   127.0.0.1;
>
> access_log  /var/log/nginx/access.log  custom;
>
> server {
> listen   80;
> server_name  localhost;
> location / { return 200; }
> }
>
> server {
> listen   80;
> server_name  _;
> location / { return 200; }
> }
>
> }
>
>
> =
> делаю два запроса
>
> curl --header "X-Real-IP: 8.9.10.11" - -I  -k http://localhost/test
> curl --header "X-Real-IP: 8.9.10.11" - -I  -k http://localhost/%
>
> получаю
>
> # cat /var/log/nginx/access.log
> 8.9.10.11 8.9.10.11 200 /test
> 127.0.0.1 - 400
>
>
> почему магия с форматом лога и хедерами работает на 200-х статусах и не
> работает на 400-х ? это такая задумка ? выглядит как баг.
>
> Илья Шипицин
>
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru