【问题标题】:How to configure NginX to serve Cached Content only when Backend is down (5xx Resp. Codes)?如何配置 NginX 仅在后端关闭时提供缓存内容(5xx 响应代码)?
【发布时间】:2013-05-21 07:29:50
【问题描述】:

我已经为我的系统配置了 NginX 监听端口 80,提供静态内容并将动态请求代理到后端服务器。

我可以将 NginX 配置为缓存后端生成的内容,但我希望仅在 Backend 响应错误 http 5xx 或完全关闭时才提供此缓存内容。

我们尝试了 max-age 为 1 秒的 proxy_cache_use_stale 选项,它起作用了,但它也有不利的一面。这只是在这 1 秒缓存老化的内容期间从缓存中提供了数十个请求。这些来自缓存的请求将错过进一步的Backend 处理(例如统计信息)。

我们只能忍受这种消极情绪如果后端出现故障, 因此,缓存将充当备份或故障转移解决方案。但只要backend 启动并响应,就不应从缓存中提供任何请求。

我会很感激任何提示

【问题讨论】:

  • @Danack 非常感谢您的更正。当我试图纠正错别字时,我断开了连接.. :( 但是,再次感谢。

标签: caching nginx reverse-proxy


【解决方案1】:

【讨论】:

  • 这是关于使用Stale,意思是:什么时候使用Stale版本的原始缓存内容?我需要的是永远不要使用缓存的内容,除非从后端得到一些错误响应代码。请..如果我错了,请纠正我。
  • 想想吧。缓存如何提供它从未存储过的东西?如果您将 max-age 设置为一秒,您将实现您的目标。
  • 哦,酷.. 很好的提示.. 我会试一试,并会发布更新 ;-)
  • 我尝试了几次,不幸的是......服务器将在 1 秒过期之前从缓存中提供一些请求。我需要的是:Nginx 在第一次请求时缓存请求.. 并继续通过后端直接服务未来的请求,除非得到错误响应代码。缓存内容来了。我试图将 1 秒设为 1 MS,但似乎最小值为 1 秒。
  • 您能详细解释一下设置吗?也许 nginx 不是适合这项工作的工具。当您提供一秒钟的旧内容时会发生什么中断?当后端没有响应时,为什么仍然可以提供 30 分钟前的内容?
【解决方案2】:

proxy_intercept_errors 可能就是您要查找的内容。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors

【讨论】:

    【解决方案3】:

    不幸的是,这是 XY 问题的一个经典实例,其中提出的问题是关于尝试的解决方案 Y,而不是实际问题 X。

    这里给出了实际问题的解决方案:https://stackoverflow.com/a/52232860/891636

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 2021-12-05
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2011-06-01
      • 2015-03-11
      相关资源
      最近更新 更多