Hello!
On Sun, Jun 18, 2017 at 07:31:05AM +0300, Иван wrote:
> Здравствуйте!
>
> В конструкции
>
> location /login/
> set_real_ip_from proxy_IP;
> if ($block_agent) {
> return 403;
> }
> }
>
> Всё, что попадает в блок if ($block_agent == 1), в логи пишется с $remote_addr
> проксирующего сервера (proxy_IP), то есть set_real_ip_from не отрабатывает.
> set_real_ip_from поместить в блок include nginx не дает. Пока что решил
> проблему меняя формат логов для в блоке if, но что это, баг\фича? И можно ли
> исправить?
Это фича. Если директива set_real_ip_from задана на уровне
location, то замена адреса происходит после выбора конфигурации, в
котором будет обрабатываться запрос, перед работой модулей контроля
доступа. А в конфигурации выше - ошибка возвращается с помощью
директив модуля rewrite, на этапе "выбора конфигурации по
условию" (см. http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html).
В результате ошибка 403 случается до того, как адрес клиента
заменён модулем realip, и в логи попадает исходный ip.
Чтобы подобных сюрпризов не было - правильнее всего задать
set_real_ip_from на уровне server, тогда замена ip-адреса клиента
будет происходить сразу после чтения запроса.
--
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru