2014-11-05 2 views
0

Я новичок в nginx, поэтому я не уверен, что это возможно.nginx - создать несколько путей кэш-памяти

Однако, я пытаюсь создать короткие, долго и Никогда не кэши для сайтов использовать.

я наивно пытался установить их в моем HTTP блок:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=short:10m; 
proxy_cache short; 
proxy_cache_key "short:$scheme$proxy_host$uri$is_args$args"; 
proxy_cache_valid 2m; 

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=long:10m; 
proxy_cache long; 
proxy_cache_key "long:$scheme$proxy_host$uri$is_args$args"; 
proxy_cache_valid 1h; 

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=day:10m; 
proxy_cache never; 
proxy_cache_key "long:$scheme$proxy_host$uri$is_args$args"; 
proxy_cache_valid 1d; 

proxy_cache off; 

После перезагрузки это выдает следующее сообщение об ошибке:

[emerg]: "proxy_cache" directive is duplicate in

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

ответ

2

директива proxy_cache означает «использовать этот кэш прямо сейчас в этом блоке», так как вы используете эту директиву несколько раз Nginx не может решить, какой кэш использовать и шоу и ошибки. Вам нужно удалить директивы proxy_cache и proxy_cache_valid и использовать по одному в каждом месте в блоке и/или сервере.

Вы должны знать, что использование proxy_cache и proxy_cache_valid директив запрещено в if блоков, так что вы не можете получить то, что вы хотите этот путь (я предполагаю, что вы будете выбирать конкретный кэш, основанный на каком-то тесте).

Таким образом, другой подход заключается в использовании конкретных заголовков в ответе на восходящий поток. Вы можете использовать один из следующих заголовков, чтобы установить время кэширования:

  • X-Accel-Expires
  • Cache-Control
  • Expires

Nginx будет выполнять эти заголовки по умолчанию. Вы можете сказать ему игнорировать некоторые из них при определении продолжительности кеширования с помощью proxy_ignore_headers.

+0

Спасибо. Чтобы быть ясным, невозможно предопределить несколько кэшей прокси-серверов? Вы должны определить только одно или переопределить их для vhost/server? –

+0

Proxy_cache_path можно использовать несколько раз в блоке http. Proxy_cache и proxy_cache_valid могут использоваться в блоках местоположения и блоках серверов, но не дублировать директивы в этих блоках. –

+1

Хорошо. Я пытался предопределить несколько разных кешей, основанных на долговечности, и затем переключаться между ними для разных * местоположений *. Однако, похоже, это невозможно. Кажется, что нужно просто определить один кеш, а затем изменить долговечность (используя proxy_cache_valid) для разных * местоположений *. –

Смежные вопросы