lolly/docs/config/caching/proxy-cache.conf
xfy 6543422281 docs: 添加 Nginx 配置和 Lua 脚本示例文档
- config: 反向代理、缓存、负载均衡、安全、SSL 等配置模板
- lua: API 网关、认证、动态路由、限流、WebSocket 等脚本示例

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 17:59:22 +08:00

117 lines
3.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ============================================================
# Nginx 代理缓存配置示例
# ============================================================
#
# 功能说明:
# - 缓存后端响应
# - 防止缓存击穿cache lock
# - stale-while-revalidate 支持
#
# Lolly 对应配置:
# server:
# proxy:
# - path: "/api"
# targets:
# - url: "http://backend:8080"
# cache:
# enabled: true
# max_age: 60s
# cache_lock: true
# stale_while_revalidate: 30s
# ============================================================
http {
# 缓存区域定义
# levels: 目录层级结构
# keys_zone: 元数据缓存区
# max_size: 最大磁盘空间
# inactive: 未访问淘汰时间
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m max_size=100m inactive=60m use_temp_path=off;
# 缓存键定义
# 可基于 URI、参数、Header 等
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
listen 80;
server_name cache.example.com;
location /api {
# 启用缓存
# Lolly 对应: cache.enabled: true
proxy_cache api_cache;
# 缓存键(可选自定义)
# proxy_cache_key "$request_uri$http_x_api_version";
# 缓存有效期
# Lolly 对应: cache.max_age: 60s
proxy_cache_valid 200 60s; # 成功响应缓存 60s
proxy_cache_valid 301 302 10m; # 重定向缓存 10m
proxy_cache_valid 404 1m; # 404 缓存 1m
proxy_cache_valid any 5s; # 其他响应缓存 5s
# 缓存锁(防止缓存击穿)
# Lolly 对应: cache.cache_lock: true
proxy_cache_lock on;
proxy_cache_lock_timeout 5s; # 锁等待超时
proxy_cache_lock_age 30s; # 锁过期时间
# stale-while-revalidate
# 在后台刷新缓存时返回过期数据
# Lolly 对应: cache.stale_while_revalidate: 30s
proxy_cache_use_stale updating; # 更新时使用过期缓存
proxy_cache_use_stale error timeout; # 错误时使用缓存
proxy_cache_use_stale http_500 http_502 http_503 http_504; # 后端错误时使用缓存
# 缓存背景更新
proxy_cache_background_update on;
# 缓存状态头(调试用)
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://backend:8080;
}
# 禁用缓存的路径
location /api/no-cache {
proxy_cache off;
proxy_pass http://backend:8080;
}
# 手动清除缓存(需要 ngx_cache_purge 模块)
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge api_cache "$scheme$request_method$host$1";
}
}
}
# 缓存状态值说明:
#
# $upstream_cache_status 可能的值:
# MISS: 未命中缓存,从后端获取
# HIT: 命中缓存
# STALE: 使用过期缓存(后端不可用)
# UPDATING: 使用过期缓存(正在后台更新)
# REVALIDATED: 缓存重新验证成功
# EXPIRED: 缓存过期
# BYPASS: 跳过缓存
#
# 缓存击穿防护:
#
# 1. cache_lock:
# - 同一请求只有一个去后端
# - 其他请求等待或返回过期缓存
# - 防止大量请求同时打到后端
#
# 2. stale-while-revalidate:
# - 缓存过期时返回旧数据
# - 后台异步刷新缓存
# - 用户不感知刷新延迟
#
# 3. 缓存预热:
# - 预先请求热门内容
# - 避免首次请求 MISS