proxy_cache 缓存失效时怎么结合 error_page 返回降级页面
在 nginx 中,当后端服务不可用或发生错误导致缓存失效时,可以通过配置 error_page 指令将请求重定向到静态的降级页面。具体做法是在 location 块中定义 proxy_pass 并开启 proxy_cache,同时设置 proxy_next_upstream 以允许在特定错误下重试或报错,然后使用 error_page 502 504 /fallback.html; 指向本地静态文件。这样当缓存未命中且后端响应失败时,nginx 会直接返回 /fallback.html 的内容,确保用户看到友好的提示而非服务器错误。

如何配置 proxy_cache 和 error_page 实现自动降级
要实现这一功能,需要在 http 块中定义 proxy_cache_path 存储路径,并在 server 块的 location 中启用缓存。关键步骤是设置 proxy_cache_valid 控制缓存时间,并通过 error_page 捕获 502(Bad Gateway)和 504(Gateway Timeout)状态码。当后端无响应时,Nginx 不会尝试重试上游(除非配置了 proxy_next_upstream),而是直接触发 error_page 逻辑,返回预设的静态 HTML 文件。

server {
listen 80;
server_name example.com;
# 定义缓存路径
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
location /api/ {
# 启用缓存
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 设置后端地址
proxy_pass http://backend_server;
# 当后端返回 502 或 504 时,不重试,直接由 error_page 处理
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
# 捕获错误并返回降级页面
error_page 502 504 /fallback.html;
location = /fallback.html {
root /usr/share/nginx/html;
internal;
}
}
}
当后端完全宕机时 error_page 的行为表现
当后端服务器完全宕机时,Nginx 无法建立连接,会立即返回 502 Bad Gateway 错误。此时,如果配置了 error_page 502 /fallback.html;,Nginx 会将内部请求重定向到 /fallback.html。由于 internal 指令的限制,外部用户无法直接访问 /fallback.html,只能通过错误触发机制获取。降级页面通常包含简单的 HTML 结构,如标题和提示信息,存储在 Nginx 的静态资源目录中。这种机制确保了在高负载或故障期间,系统仍能向用户提供基本可用的界面,而不是显示默认的 Nginx 错误页。












