假设我的后端需要 2 秒钟才能响应(超出我们的控制范围),并且我永远不希望访问者遇到这种延迟,我们不受 cookie 或用户会话的影响。
我想在 nginx 中执行如下操作:
server {
location / {
# server requests from cache unless for some reason its not in cache
proxy_pass http://backend/
proxy_cache mycache
proxy_cache_is_valid 2m
}
location / where request IP = 127.0.0.1 {
proxy_pass http://backend/
do_not_use_cache
but_store response in cache
}
}
这样,我就可以每 30 秒从 localhost 运行一次简单的 curl 任务,让缓存保持新鲜/热度,其中包含我需要的几个页面,我永远不希望访问者成为预热缓存的人。我读过文档,但不知道该如何实现这一点。
答案1
尝试一下此配置。
http {
# http section directives
proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache;
geo $bypass_by_ip {
default 0;
127.0.0.1 1;
}
server {
# other server directives
location / {
proxy_cache mycache;
proxy_cache_valid any 2m;
proxy_cache_use_stale timeout updating;
proxy_cache_bypass $bypass_by_ip;
proxy_pass ...;
}
}
}
proxy_cache_bypass
发出直接请求,绕过缓存。这由其参数控制 - 如果其中任何一个不是空字符串或 0。我使用它geo
来提供这样的值(默认情况下为 0,当远程 IP 为 127.0.0.1 时为 1)
笔记您需要 Nginx 1.0.4 以上版本才能使此配置生效。早期版本在proxy_cache_bypass
/proxy_cache_nocache
逻辑方面存在错误。