使用不带 $args 的原始 $request_uri 设置 fastcgi_cache_key

Set fastcgi_cache_key using original $request_uri without $args

我正在尝试集成一个 WordPress 插件(Jetpack 的相关帖子模块),它将查询字符串添加到 post URL 的末尾。我想使用 FastCGI 缓存 URL,同时完全忽略查询字符串/$args.

我当前的配置是:fastcgi_cache_key "$scheme$request_method$host$request_uri";

我知道使用 the solution mentioned here 为包含特定 $arg 的 URL 关闭我的 $skip_cache 变量,这很有效。但是,无论 $args 的值如何,我都想缓存相同的结果,而不是为每组 $args.

使用唯一的缓存键

我也知道 some suggestionsfastcgi_cache_key 中只使用 $uri 而不是 $request_uri;然而,因为 $uri 不仅仅是原始请求的 URI 减去 $args,WordPress 架构中的某些东西(可能是漂亮的链接)强制所有请求的 URI 到 return 相同的缓存结果(而不是每个页面都有不同的结果)。

有什么方法可以真正使用最初请求的 URI 而无需在缓存键中包含 $args 吗?

刚才,我遇到了类似的问题。 所以,我的解决方案:

在nginx配置中加入

http  { 
    ...
    map $request_uri $request_path { 
       ~(?<captured_path>[^?]*) $captured_path; 
    }
    ...
}

那么你将有一个变量$request_path,其中包含$request_uri而没有query_string。

所以使用 $request_path 作为缓存键

fastcgi_cache_key "$scheme$request_method$host$request_path"

重要。 "map" 指令只能添加到 "http {}"。该指令将针对所有主机的所有请求执行。