- config: 反向代理、缓存、负载均衡、安全、SSL 等配置模板 - lua: API 网关、认证、动态路由、限流、WebSocket 等脚本示例 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
117 lines
3.6 KiB
Plaintext
117 lines
3.6 KiB
Plaintext
# ============================================================
|
||
# 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 |