Nginx反向代理禁用缓存。

13

我使用nginx作为反向代理连接API。问题在于,当我添加或删除某些内容后发送查询时,Nginx会返回旧的JSON值。我尝试禁用缓存,但没有效果。

我的nginx配置:

location  / {

  sendfile off;
  add_header Last-Modified $date_gmt;
  add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
  if_modified_since off;
  expires off;
  etag off;
  proxy_no_cache 1;
  proxy_cache_bypass 1;

  proxy_pass http://127.0.0.1:5000;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header HTTPS   $https;
}

我尝试了不使用nginx的查询,所有内容在控制台中都正常工作。

谢谢!


后端应用程序是否正在缓存它? - Shawn C.
不,当我在控制台服务器中进行查询时,它始终发送正确的JSON。 - Kévin Gaulin
最后,这是我的后端...我在数据库中关闭会话时犯了一些错误。 - Kévin Gaulin
1个回答

19
根据proxy_cache文档,你需要替换。
proxy_no_cache 1;
proxy_cache_bypass 1;

proxy_no_cacheproxy_cache_bypass定义了哪些条件下响应不会被保存到缓存中。

如果要禁用缓存,可以使用以下语句替换这两个条件:

proxy_cache off;

以下是一个完整的示例,可用于为无状态 API 服务器配置代理:

location /myapi {

        # Proxy 
        proxy_set_header                X-Localhost true;
        proxy_set_header                X-Real-IP $remote_addr;
        proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass                      http://localhost:8080/myapi;

        proxy_redirect                  off;
        proxy_buffers                   32 16k;
        proxy_busy_buffers_size         64k;
        proxy_cache                     off;


        # Headers for client browser NOCACHE + CORS origin filter 
        add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        expires off;
        add_header    'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        add_header    'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept' always;

        allow all;
    }

2
升级到ES 7.7后,我失去了"proxy_cache off"。你解决了我的问题,太感谢了! - Andrea Rabbaglietti
1
@bdzzaid 默认情况下缓存是禁用的。那么可以跳过缓存指令,对吧? - wuarmin
@wuarmin,是的,你可以使用proxy_cache_bypass,但你必须定义在哪些条件下响应不会从缓存中获取。 - bdzzaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接