如何将Nginx设置为缓存反向代理?

Modified on: Wed, 13 Nov 2019 13:20:02 +0800

我最近听说Nginx已将缓存添加到其反向代理功能中。我环顾四周但找不到有关它的信息。

我想在Apache / Django前面建立Nginx作为缓存反向代理:为Apache的某些(但不是全部)动态页面提供Nginx代理请求,然后缓存生成的页面并为这些页面提供后续请求来自缓存。

理想情况下,我想以两种方式使缓存无效:

  1. 在缓存项目
  2. 上设置到期日期
  3. 显式使缓存的项无效。例如。如果我的Django后端更新了某些数据,我想告诉Nginx使受影响页面的缓存无效
  4. 醇>

    是否可以设置Nginx来做到这一点?怎么样?

最佳答案

我认为没有办法明确地使缓存的项目无效,但这里有一个如何完成其​​余工作的示例。 更新:正如Piotr在另一个答案中所提到的,有一个缓存清除模块你可以使用。您还可以使用nginx的proxy_cache_bypass强制刷新缓存的项目 - 有关详细信息,请参阅Cherian的答案

在此配置中,将从example.net检索未存储的项目并进行存储。缓存版本将提供给未来的客户,直到它们不再有效(60分钟)。

您的Cache-Control和Expires HTTP标头将被接受,因此如果您想明确设置过期日期,您可以通过在您代理的任何内容中设置正确的标头来实现。

您可以调整许多参数 - 有关所有这些的详细信息,请参阅nginx代理模块文档,包括有关不同设置/参数含义的详细信息:
http://nginx.org/r/proxy_cache_path

http {
  proxy_cache_path  /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
  proxy_temp_path /var/www/cache/tmp; 


  server {
    location / {
      proxy_pass http://example.net;
      proxy_cache my-cache;
      proxy_cache_valid  200 302  60m;
      proxy_cache_valid  404      1m;
    }
  }
}
作者:Community,Casey

相关问答

添加新评论