Welcome! Log In Create A New Profile

Advanced

Re[2]: Зацикливание на редиректе

August 07, 2017 02:12AM
Спасибо.

Только Вы говорите об URI "/", а вопрос был об URL, точнее - о зацикливании, связанном с неправильной (ИМХО) интерпретацией в ngx переменной $host. Как она ДОЛЖНА обрабатываться - сказано в доке, что имеем ПО ФАКТУ - в моем примере.
Добавление опции -v, по сути, ничего не меняет. Разве что лишний раз убедиться, что при редиректе передается заголовок HOST.

Тема уже поднималась, в частности, здесь (  http://mailman.nginx.org/pipermail/nginx-ru/2014-June/054083.html ) довольно обширная дискуссия. Но там все достаточно просто, речь идет о явно невалидных запросах, которые можно и нужно фильтровать. Я же несколько усложнил задачу и привел пример псевдо-валидного запроса, который отфильтровать невозможно.
И до тех пор, пока проблема с переменной $host не будет решена, такое зацикливание неизбежно.
Так что вопрос больше к разработчикам.


>Суббота, 5 августа 2017, 21:46 +03:00 от Валентин Бартенев < vbart@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
Subject Author Posted

Зацикливание на редиректе

CoDDoC August 03, 2017 05:16AM

Re: Зацикливание на редиректе

Валентин Бартенев August 05, 2017 02:48PM

Re[2]: Зацикливание на редиректе

CoDDoC August 07, 2017 02:12AM

Re: Зацикливание на редиректе

Валентин Бартенев August 07, 2017 06:26AM

Re: Зацикливание на редиректе

Валентин Бартенев August 07, 2017 06:38AM

Re[2]: Зацикливание на редиректе

CoDDoC August 07, 2017 08:28AM

Re: Зацикливание на редиректе

Валентин Бартенев August 07, 2017 09:14AM

Re[2]: Зацикливание на редиректе

CoDDoC August 08, 2017 01:22AM

Re: Зацикливание на редиректе

Иван August 08, 2017 06:00AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 157
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready