使用不带 $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 suggestions 在 fastcgi_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 {}"。该指令将针对所有主机的所有请求执行。
我正在尝试集成一个 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 suggestions 在 fastcgi_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 {}"。该指令将针对所有主机的所有请求执行。