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

Ответить