Спасибо. Только Вы говорите об URI "/", а вопрос был об URL, точнее - о зацикливании, связанном с неправильной (ИМХО) интерпретацией в ngx переменной $host. Как она ДОЛЖНА обрабатываться - сказано в доке, что имеем ПО ФАКТУ - в моем примере. Добавление опции -v, по сути, ничего не меняет. Разве что лишний раз убедиться, что при редиректе передается заголовок HOST.
Тема уже поднималась, в частности, здесь ( http://mailman.nginx.org/pipermail/nginx-ru/2014-June/054083.html ) довольно обширная дискуссия. Но там все достаточно просто, речь идет о явно невалидных запросах, которые можно и нужно фильтровать. Я же несколько усложнил задачу и привел пример псевдо-валидного запроса, который отфильтровать невозможно. И до тех пор, пока проблема с переменной $host не будет решена, такое зацикливание неизбежно. Так что вопрос больше к разработчикам. >Суббота, 5 августа 2017, 21:46 +03:00 от Валентин Бартенев < vb...@nginx.com >>: > >On Thursday 03 August 2017 12:15:16 CoDDoC wrote: >[..] >> Судя по логам, это не совсем так. >> По крайней мере, в моем случае (nginx/1.10.2), переменная $host получает имя >> хоста из строки запроса только если не указано поле host заголовка. Т.е. >> обрабатывается ситуация с HTTP/1.0, без $http_host в заголовке. Но если в >> заголовке задать какое-то (любое) значение $http_host, это же значение >> получает и $host. >> >> Далее ( http://nginx.org/ru/docs/http/request_processing.html ): nginx >> "сопоставляет значение поля Host заголовка запроса с директивами server_name >> в блоках server, которые соответствуют IP-адресу и порту". Т.е. все-таки >> $http_host. А туда можно прописать что угодно. >> Я не рассматриваю сейчас ситуацию, когда в $http_host прописано имя, не >> совпадающее с перечисленными в server_name. Это все благополучно фильтруется >> и отправляется на 444. Также, я не рассматриваю браузеры, которые отправляют >> правильный $http_host и получают правильные редиректы. >> >> Вот такой случай: >> curl -ILH 'Host: www.test.com ' https://test.com >> >> Если бы переменная $host получила значение в порядке приоритета, оно было бы >> test.com (имя хоста из строки запроса). Тогда можно было бы реализовать >> такой костыль, как фильтрация по условию "$host не равно $http_host". Но в >> запросе присутствует заголовок host, и обе переменные $host и $http_host >> получают одно и то же значение www.test.com , отфильтровать невозможно. > > > >Вы видимо ошибочно считаете, что данная команда curl в качестве строки запроса >передает " https://test.com ". > >Нет, curl в данном случае в строке запроса передает "/". > >Чтобы увидеть, что конкретно посылает curl на сервер, можно добавить опцию >"-v". > >-- >Валентин Бартенев >_______________________________________________ >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