Re: proxy cache key и fastcgi cache key

Валентин Бартенев vbart at nginx.com
Sat Jan 11 01:06:20 UTC 2014


On Friday 10 January 2014 19:40:07 S.A.N wrote:
> > Ровным счетом так nginx и поступает, если передан absoluteURI, то
> > виртуальный
> > сервер определяется по нему, а заголовок Host игнорируется.
> 
> Ровным счетом так же должен поступать и бекенд, игнорировать заголовок Host,
> если передан absoluteURI.
> Но дело в том что бекенд не получает, raw запрос с absoluteURI, именно по
> этой причине бекенду необходимо передать, то значения HTTP_HOST, которое
> использовал Nginx для определения вирт хоста.

Значение HTTP_HOST относится к FastCGI и определяется другим RFC, в котором
сказано:

   Meta-variables with names beginning with "HTTP_" contain values read
   from the client request header fields, if the protocol used is HTTP.
   The HTTP header field name is converted to upper case, has all
   occurrences of "-" replaced with "_" and has "HTTP_" prepended to
   give the meta-variable name.  The header data can be presented as
   sent by the client, or can be rewritten in ways which do not change
   its semantics.

так что начиная уже с этой фразы и далее - вы не правы.


> В противном случаи возможны коллизии, приведу примеры.

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


> 
> На одном хостинге, хостятся два конкурирующих электронных магазина,
> например: apple-shop.com и samsung-shop.com, в котором используется Nginx
> кеширования.
> Для каждого вирт хоста прописан proxy_cache_key $proxy_host$request_uri.
> 
> Теперь делаем запрос
> GET http://apple-shop.com/ HTTP/1.1
> Host: samsung-shop.com
> 
> В результате чего, ответ бекенда сохранится в кеше Nginx с ключом "
> samsung-shop.com/" но содержать внутри будет страницу apple-shop.com/. 
> На все последующие запросы samsung-shop.com будет отдаваться страница с
> товарами Apple, так как внутри кеш файла с ключом "samsung-shop.com/" будет
> страница хоста apple-shop.com.

Не будет, если только в обоих случаях не указано:

     proxy_pass http://samsung-shop.com;

а если именно так и указано, то получаете ровно такое поведение, какое
было сконфигурировано, что же в этом странного?  Что настроили - то и 
получили.  Вы настраиваете HTTP сервер, что предполагает от вас хотя бы
минимальных знаний предмета и умения читать документацию.

Вы хотите пожаловаться на кольт 45-го калибра, что он позволят вам выстрелить
себе в ногу, да ещё разными способами?


> И так будут работать бекенды на любом языке программирования не только на
> РНР, те самые правильные программисты которых не расстреляли, будут в
> недоумения, что они сделали не так, вить все же сделано в точности как
> написано в официал документации Nginx :)

 1. В каком месте документации написано, что надо настраивать так, как было
    указано вами выше?

 2. Как вообще всё вышеописанное вами относится к обсуждаемой в данной
    подветке теме про http://habrahabr.ru/post/166855/ (которая вообще
    не относится к кэшу и директивам proxy_cache_key/fastcgi_cache_key,
    но уж так вышло, что была затронута)?

--
Валентин Бартенев


Подробная информация о списке рассылки nginx-ru