nginx - 创建多个缓存路径

Jas*_*ary 5 caching 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;
Run Code Online (Sandbox Code Playgroud)

重新加载后会抛出以下错误:

[emerg]:“proxy_cache”指令重复于

如何设置不同的缓存路径以在虚拟主机之间共享?

Xav*_*cas 5

proxy_cache指令的意思是“立即在该块中使用该缓存”,因此当您多次使用该指令时,nginx 无法决定使用哪个缓存并显示错误。您必须做的是删除proxy_cacheproxy_cache_valid指令,并在位置和/或服务器块中一次使用其中一个。

您必须知道块中禁止使用proxy_cache和指令,因此您可能无法通过这种方式获得您想要的东西(我假设您将根据某些测试选择特定的缓存)。proxy_cache_validif

因此,另一种方法是在上游回复中使用特定标头。您可以使用以下标头之一来设置缓存时间:

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

默认情况下,Nginx 将遵守这些标头。您可以告诉他在使用 决定缓存持续时间时忽略其中一些内容proxy_ignore_headers

  • Proxy_cache_path 在 http 块中可以多次使用。proxy_cache 和 proxy_cache_valid 可以在位置块和服务器块中使用,但这些块中的指令不能重复。 (3认同)