Welcome! Log In Create A New Profile

Advanced

Re: proxy cache key и fastcgi cache key

Gena Makhomed
January 10, 2014 06:08PM
On 11.01.2014 0:17, Валентин Бартенев wrote:

>>>>>>>> Кому интересно почитать, подробней вот ссылка.
>>>>>>>> http://habrahabr.ru/post/166855/
>> ...
>>>> $host
>>>> in this order of precedence: host name from the request line, or host
>>>> name from the “Host” request header field, or the server name matching a
>>>> request
>> ...
>>> Единственный правильный способ: пойти в IETF с предложением исправить
>>> соответствующие RFC, которые в том числе оговаривают, что следует делать
>>> при получении нескольких заголовков Host, ну а потом уже сюда.
>>
>> с RFC то как раз все в порядке: "network location of the URI
>> (authority) MUST be transmitted in a Host header field",
>> только вот nginx не соответствует этим требованиям...
>>
>> http://tools.ietf.org/search/rfc2616#section-5.1.2
...
> Если почитать внимательнее, то приведенные требования относятся к клиенту.
> Понятно, что сервер в принципе не может влиять на то, что transmitted в
> запросе.

nginx выступает в роли сервера только в том случае,
когда он самостоятельно обслуживает клиентский запос.

В тот момент, когда nginx делает http запрос к удаленному
серверу он выступает в роли клиента. поэтому я и цитировал 5.1.2

а дальше, получив ответ от удаленного сервера он с этим ответом
делает разные интересные вещи, например, сканирует его на предмет
ssi-директив, или пропускает через свои sub/addition/и т.п. модули.
и то, что получится в результате - складывает в файл кеша на диске,
и после дополнительной цепочки преобразований - отправляет то,
что получилось в результате как ответ на запрос своего клиента.

например, если исходный запрос от клиента к nginx был

GET http://good-site.com/pub/WWW/TheProject.html HTTP/1.1
Host: bad-site.com

содержимое заголовка Host: согласно 5.2.1 должно игнорироваться,
адрес хоста в этом случае: good-site.com

а согласно требований 5.1.2 - network location of the URI (authority)
MUST be transmitted in a Host header field, то есть исходящий запрос
должен быть

GET /pub/WWW/TheProject.html HTTP/1.1
Host: good-site.com

nginx же в настройке по-умолчанию не соответсвует RFC,
и вместо требуемого значения пишет в заголовок Host:
значение переменной $proxy_host

Теперь рассмотрим вариант связи с backend`ом по протоколу FastCGI,
но поскольку у нас большой и сложный сайт сделаем два фронтенда:

1) основной nginx frontend
2) nginx frontend на хосте backend`а
3) backend, работающий по протоколу FastCGI.

запрос от клиента проходит цепочку (1)->(2)->(3).
поскольку между (1) и (2) используется протокол http,
то согласно требований 5.1.2 и 5.2.1 на (2) запрос приходит
в виде

GET /pub/WWW/TheProject.html HTTP/1.1
Host: good-site.com

не смотря на то, что в исходном запросе
от клиента был игнорируемый заголовок Host: bad-site.com

а дальше - все просто. В соответствии с требованиями
спецификации протокола FastCGI - nginx записывает в переменную
HTTP_HOST значение good-site.com.

точнее, он ДОЛЖЕН так делать, согласно требований HTTP протокола
прямо из коробки, без какой-либо дополнительной настройки.

Эта схема работает одинаково вне зависимости от количества
промежуточных серверов между nginx frontend и backend.

точнее, ДОЛЖНА работать одинаково,
вне зависимости от количества промежуточных серверов.

если в случае отсутствия промежуточных серверов nginx ведет себя
не так, - то это BUG, ибо в случае, когда на nginx frontend
приходит запрос в виде absoluteURI, - тогда "Any Host header
field value in the request MUST be ignored".
nginx этого по каким-то причинам не делает.

хотя согласно требований RFC - обе эти формы записи:

GET http://good-site.com/pub/WWW/TheProject.html HTTP/1.1

и

GET /pub/WWW/TheProject.html HTTP/1.1
Host: good-site.com

полностью эквивалентны между собой. и nginx имеет
полное право и даже обязанность трансформировать
запрос с absoluteURI в запрос с relativeURI
и network location of the URI (authority)
MUST be transmitted in a Host header field.

=============================================================

> Что касается сервера, написано буквально секцией ниже:
> http://tools.ietf.org/search/rfc2616#section-5.2
>
> 5.2 The Resource Identified by a Request
>
> The exact resource identified by an Internet request is determined by
> examining both the Request-URI and the Host header field.
>
> An origin server that does not allow resources to differ by the
> requested host MAY ignore the Host header field value when
> determining the resource identified by an HTTP/1.1 request. (But see
> section 19.6.1.1 for other requirements on Host support in HTTP/1.1.)
>
> An origin server that does differentiate resources based on the host
> requested (sometimes referred to as virtual hosts or vanity host
> names) MUST use the following rules for determining the requested
> resource on an HTTP/1.1 request:
>
> 1. If Request-URI is an absoluteURI, the host is part of the
> Request-URI. Any Host header field value in the request MUST be
> ignored.
>
> 2. If the Request-URI is not an absoluteURI, and the request includes
> a Host header field, the host is determined by the Host header
> field value.
>
> 3. If the host as determined by rule 1 or 2 is not a valid host on
> the server, the response MUST be a 400 (Bad Request) error message.
>
> Recipients of an HTTP/1.0 request that lacks a Host header field MAY
> attempt to use heuristics (e.g., examination of the URI path for
> something unique to a particular host) in order to determine what
> exact resource is being requested.
>
> Ровным счетом так nginx и поступает, если передан absoluteURI, то виртуальный
> сервер определяется по нему, а заголовок Host игнорируется.

Та часть nginx, которая работает в режиме сервера определяет Host
правильно. И правильно сохранет его в свою переменную $host.

Но дальше в нарушение RFC вместо $host зачем-то используется $http_host
не смотря на прямой запрет: Any Host header field value in the request
MUST be ignored.

А несоответствие требованиям RFC 2616 - это ведь BUG, верно?

--
Best regards,
Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 07, 2014 06:16AM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 09, 2014 07:12AM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 09, 2014 08:58AM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 09, 2014 09:34AM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 10, 2014 04:56AM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 10, 2014 10:44AM

Re: proxy_cache_key и fastcgi_cache_key

Валентин Бартенев January 10, 2014 12:58PM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 10, 2014 03:34PM

Re: proxy_cache_key и fastcgi_cache_key

Валентин Бартенев January 10, 2014 03:50PM

Re: proxy_cache_key и fastcgi_cache_key

Gena Makhomed January 10, 2014 04:12PM

Re: proxy_cache_key и fastcgi_cache_key

Валентин Бартенев January 10, 2014 06:18PM

Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin January 13, 2014 07:24AM

Re: proxy_cache_key и fastcgi_cache_key

S.A.N January 09, 2014 02:03PM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 09, 2014 05:58PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 05:26AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 06:46AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 07:08AM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 08:10AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 03:52PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 05:18PM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 10, 2014 06:08PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 06:52PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 07:18PM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 11, 2014 06:20AM

Re: proxy cache key и fastcgi cache key

Gena Makhomed January 11, 2014 05:36AM

Re: proxy cache key и fastcgi cache key

S.A.N January 10, 2014 07:40PM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 08:08PM

Re: proxy cache key и fastcgi cache key

S.A.N January 10, 2014 10:07PM

Re: proxy cache key и fastcgi cache key

S.A.N January 10, 2014 10:30PM

Re: proxy cache key и fastcgi cache key

S.A.N January 11, 2014 03:12AM

Re: proxy cache key и fastcgi cache key

S.A.N January 13, 2014 12:31AM

Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 11, 2014 06:32AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 11, 2014 06:44AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 11, 2014 07:26AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 11, 2014 03:54PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 12, 2014 08:42AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 14, 2014 02:16PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 15, 2014 04:10PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 16, 2014 08:02AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 16, 2014 11:19AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 16, 2014 11:38AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 16, 2014 03:36PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 17, 2014 03:02AM

Re: Об одной малоизвестно й уязвимости в веб сайтах

Gena Makhomed June 17, 2014 06:36AM

Re: Об одной малоизвестно й уязвимости в веб сайтах

S.A.N June 17, 2014 04:11PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Gena Makhomed June 16, 2014 04:22PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Maxim Dounin June 17, 2014 02:32AM

Re: Об одной малоизвестно й уязвимости в веб сайтах

Gena Makhomed June 17, 2014 06:32AM

Re: Об одной малоизвестн ой уязвимости в веб сайтах

Maxim Dounin June 17, 2014 07:04AM

Re: Об одной малоизвест ной уязвимости в веб сайтах

Валентин Бартенев June 17, 2014 07:16AM

Re: Об одной малоизвест ной уязвимости в веб сайтах

Igor Sysoev June 18, 2014 10:28AM

Re: Об одной малоизвестн ой уязвимости в веб сайтах

Валентин Бартенев June 17, 2014 07:06AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Dmitry June 11, 2014 03:56PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 12, 2014 10:47AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 02:42AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 10:46AM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 01:02PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 03:31PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 04:12PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 04:50PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Илья Шипицин June 17, 2014 04:16PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 17, 2014 01:30PM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 17, 2014 06:05PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 18, 2014 03:56AM

Re: Об одной малоизвестной уязвимости в веб сайтах

S.A.N June 18, 2014 12:15PM

Re: Об одной малоизвестной уязвимости в веб сайтах

Валентин Бартенев June 18, 2014 04:06AM

Re: proxy cache key и fastcgi cache key

Валентин Бартенев January 10, 2014 07:54AM

nginx и RFC

Gena Makhomed January 13, 2014 07:44PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 301
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