ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: proxy cache key и fastcgi cache key



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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.