收到特定请求时绕过 Nginx 缓存

Dav*_*vid 7 nginx

我正在为我的应用程序使用 Nginx 缓存。我想绕过一个非常具体的请求字符串的缓存。我以为我可以使用以下内容来实现这一目标:

location / {
 if($uri ~ .*(ServerCheck).*) {set $nocache 1; }
 proxy_pass http://127.0.0.1:9001/;
 proxy_no_cache $nocache;
 proxy_cache_bypass $nocache;
 proxy_cache crownstudent;
 proxy_cache_valid 200 1y;
 proxy_cache_use_stale error timeout invalid_header updating
 http_500 http_502 http_503 http_504;
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用。有什么办法可以让我做到这一点吗?Nginx 文档非常不清楚并且缺乏示例。

谢谢!

ris*_*sin 6

$uri保存一个规范化的url,它可以被任何其他指令或重定向修改。如果您的 nginx 配置变得越来越长,事情会变得更加复杂。我更喜欢$request_uri(根据 nginx 文档:带参数的完整原始请求 URI)。

尝试用这个替换你的条件:

if($request_uri ~ ServerCheck) {set $nocache 1; }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您不需要捕获目标字符串ServerCheck,因为 nginx 只是测试正则表达式。

此外,您可能希望确保该请求已由代理回复。我使用 add_header 指令来完成这项工作。如:

add_header X-Proxy-Cache $upstream_cache_status;
Run Code Online (Sandbox Code Playgroud)