<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>