Re: proxy_cache_key и fastcgi_cache_key

Maxim Dounin mdounin at mdounin.ru
Thu Jan 9 14:33:25 UTC 2014


Hello!

On Thu, Jan 09, 2014 at 03:57:19PM +0200, Gena Makhomed wrote:

> On 09.01.2014 14:10, Maxim Dounin wrote:

[...]

> >Смысл значения по умолчанию для proxy_cache_key состоит в том, что
> >идентифицируется тот ресурс, куда осуществялется проксирование.
> 
> >Тем самым, если в разных виртуальных серверах проксирование
> >осуществляется в одно и то же место - будет использован один и тот
> >же элемент кеша.
> 
> так ведь именно в этом и состоит суть проблемы. в разных виртуальных
> серверах проксирование обычно осуществляется на один и тот же
> backend/upstream, и для *разных* виртуальных серверов будет
> использован один и тот же элемент кеша $scheme$XXX$request_uri.
> 
> при proxy_pass http://127.0.0.1:80/ в $proxy_host окажется 127.0.0.1
> аналогично, и в случае fastcgi_cache_key localhost:9000$request_uri;
> 
> - запросы к разным virtual host`ам будут попадать в один и тот же
> элемент кеша, и nginx не будет различать *разные* virtual host`ы.
> 
> возможно имеет смысл дефолтовые настройки сделать такими,
> чтобы они были безопасными по-умолчанию для всех пользователей?
> т.е. $host вместо $proxy_host ?

В запросах на бекенд по умолчанию в заголовке Host 
передаётся именно $proxy_host, и значение proxy_cache_key 
соответсвует тому, что происходит по умолчанию.  Т.е. по умолчанию - 
всё безопасно.

Если же говорить о том, что может быть достугнуто с помощью 
худождественного выпиливания по конфигу без понимания 
происходящего - то вывод "Мы все умрём" никто не отменял.

[...]

> кстати, аналогичный вопрос касается и дефолтового значнеия proxy_set_header
> - http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
> 
> syntax: 	proxy_set_header field value;
> default: 	proxy_set_header Host $proxy_host;
>                 proxy_set_header Connection close;
> 
> хотя ниже идет рекомендация делать proxy_set_header Host $host;
> почему бы не сделать $host значением по-умолчанию?

Ниже говорится о том, что если хочется передать на бекенд значение 
Host'а из запроса, то этом можно сделать с помощью $http_host, но 
лучше - с помощью $host (и объясняется, почему).

[...]

-- 
Maxim Dounin
http://nginx.org/



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