<HTML><BODY><div class="js-helper js-readmsg-msg">
<style type="text/css"></style>
<div>
<base target="_self" href="https://e.mail.ru/">
<div id="style_15020363200000000312_BODY">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
СпаÑибо.<br><br>Только Ð’Ñ‹ говорите об URI "/", а Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð±Ñ‹Ð» об URL, точнее - о зацикливании, ÑвÑзанном Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¹ (ИМХО) интерпретацией в ngx переменной $host. Как она ДОЛЖÐРобрабатыватьÑÑ - Ñказано в доке, что имеем ПО ФÐКТУ - в моем примере.<br>Добавление опции -v, по Ñути, ничего не менÑет. Разве что лишний раз убедитьÑÑ, что при редиректе передаетÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº HOST.<br><br>Тема уже поднималаÑÑŒ, в чаÑтноÑти, здеÑÑŒ ( <a href="http://mailman.nginx.org/pipermail/nginx-ru/2014-June/054083.html">http://mailman.nginx.org/pipermail/nginx-ru/2014-June/054083.html</a> ) довольно Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ð´Ð¸ÑкуÑÑиÑ. Ðо там вÑе доÑтаточно проÑто, речь идет о Ñвно невалидных запроÑах, которые можно и нужно фильтровать. Я же неÑколько уÑложнил задачу и привел пример пÑевдо-валидного запроÑа, который отфильтровать невозможно.<br>И до тех пор, пока проблема Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ $host не будет решена, такое зацикливание неизбежно.<br>Так что Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ к разработчикам.<br><br><br><blockquote style="border-left:1px solid #0857A6;margin:10px;padding:0 0 0 10px;">
Суббота, 5 авгуÑта 2017, 21:46 +03:00 от Валентин Бартенев <<a href="mailto:vbart@nginx.com">vbart@nginx.com</a>>:<br>
<br>
<div>
<div>
<div>
<div>On Thursday 03 August 2017 12:15:16 CoDDoC wrote:<br>
[..]<br>
> Ð¡ÑƒÐ´Ñ Ð¿Ð¾ логам, Ñто не ÑовÑем так.<br>
> По крайней мере, в моем Ñлучае (nginx/1.10.2), Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ $host получает Ð¸Ð¼Ñ Ñ…Ð¾Ñта из Ñтроки запроÑа только еÑли не указано поле host заголовка. Т.е. обрабатываетÑÑ ÑÐ¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ñ HTTP/1.0, без $http_host в заголовке. Ðо еÑли в заголовке задать какое-то (любое) значение $http_host, Ñто же значение получает и $host.<br>
> <br>
> Далее (<a href="http://nginx.org/ru/docs/http/request_processing.html" target="_blank">http://nginx.org/ru/docs/http/request_processing.html</a>): nginx "ÑопоÑтавлÑет значение Ð¿Ð¾Ð»Ñ Host заголовка запроÑа Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð°Ð¼Ð¸ server_name в блоках server, которые ÑоответÑтвуют IP-адреÑу и порту". Т.е. вÑе-таки $http_host. Ртуда можно пропиÑать что угодно.<br>
> Я не раÑÑматриваю ÑÐµÐ¹Ñ‡Ð°Ñ Ñитуацию, когда в $http_host пропиÑано имÑ, не Ñовпадающее Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñленными в server_name. Ðто вÑе благополучно фильтруетÑÑ Ð¸ отправлÑетÑÑ Ð½Ð° 444. Также, Ñ Ð½Ðµ раÑÑматриваю браузеры, которые отправлÑÑŽÑ‚ правильный $http_host и получают правильные редиректы.<br>
> <br>
> Вот такой Ñлучай:<br>
> curl -ILH 'Host: <a href="http://www.test.com" target="_blank">www.test.com</a>' <a href="https://test.com" target="_blank">https://test.com</a><br>
> <br>
> ЕÑли бы Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ $host получила значение в порÑдке приоритета, оно было бы test.com (Ð¸Ð¼Ñ Ñ…Ð¾Ñта из Ñтроки запроÑа). Тогда можно было бы реализовать такой коÑтыль, как Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ уÑловию "$host не равно $http_host". Ðо в запроÑе приÑутÑтвует заголовок host, и обе переменные $host и $http_host получают одно и то же значение <a href="http://www.test.com" target="_blank">www.test.com</a> , отфильтровать невозможно.<br>
<br>
<br>
<br>
Ð’Ñ‹ видимо ошибочно Ñчитаете, что Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° curl в качеÑтве Ñтроки запроÑа<br>
передает "<a href="https://test.com" target="_blank">https://test.com</a>".<br>
<br>
Ðет, curl в данном Ñлучае в Ñтроке запроÑа передает "/".<br>
<br>
Чтобы увидеть, что конкретно поÑылает curl на Ñервер, можно добавить опцию "-v".<br>
<br>
--<br>
Валентин Бартенев<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br data-mce-bogus="1"></div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<base target="_self" href="https://e.mail.ru/">
</div>
</div></BODY></HTML>