Nginx根据请求的缓存策略

Nginx根据请求的缓存策略

假设我的后端需要 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逻辑方面存在错误。

相关内容