#1000·Nginx

proxy_cache_use_stale 在错误响应持续时不会刷新缓存定时器

作者: jwheare创建于 2025年11月21日更新于 2026年9月15日
标签bugneeds-refinement

环境

在一个 Docker 容器中运行, 最新的官方建筑

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}Nginx -V
nginx版本: nginx/1.29.3
由 gcc 14.2.0 (德文 14.2.0-19)所建 .
由OpenSSL 3.5.1 1 July 2025(由OpenSSL 3.5.4 运行 2025年9月30日)所建
启用 TLS SNI 支持
配置参数: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/nginx/error.log --http-log-path=/var/log/nginx/access. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -fstack-protection-strong-fstack-clash-protection-Wform-Worror=format-security-fc-protection-Wp,-D FORTIFY SURCE=2-fPIC'-与-ld-opt='-wl,-z,-relro-Wl,-z,-now-Wl,---需要-pie'-

# 不一样 -a
Linux 0143a472b060 6.10.14-linuxkit #1 SMP PREEMPT DYNAMIC 5月17日 08:29:19 UTC 2025 x86 64 GNU/Linux

说明

我设定了我的来源,以返回429个“Cache-control: max-age=60”的请求错误。 这些由后端抓取到第三方API所触发. 我希望错误能被nginx短暂地缓存,这样下游的请求就不会为了减少对费率限制的贡献而再三地击中源头.

我试图用以下指示来达到这个目的:

`代理 cache use stale http 429;'

我看到的行为是:

  • `T=00' 请求 1 - > 429 - > 源返回缓存错误
  • `T=10'请求2 - > HIT - > 来源未达到
  • `T=70' 请求 3 - > STALE - > 源代码返回一个错误,该错误是 * 没有 * 缓存
  • `T=80' 请求 4 - > STALE - > 来源返回一个错误,该错误是 * 不* 缓存

预期行为:

  • `T=70' 请求 3 - > STALE - > 来源返回一个错误,* 是缓存
  • `T=80'请求4 - > HIT - > 来源未达到

如果禁用"proxy cache use stale",我看见:

  • `T=00' 请求 1 - > 429 - > 源返回缓存错误
  • `T=10'请求2 - > HIT - > 来源未达到
  • `T=70' 请求 3 - > EXPIRED - > 来源返回错误 . . . . . . .