本文提供一套生产级的 Nginx 反代缓存配置,用于加速 wordpress。
keys_zone=sitecache:20m:缓存键共享内存名称和大小(20M 大约存储 20 万个 key)。
inactive=1d:文件 1 天未被访问则自动删除。
max_size=5g:磁盘缓存上限 5GB,可按需调整。
💡 HTTP 段配置一次后全局生效。如果你的服务器有多个站点,可以定义多个 proxy_cache_path 并用不同的 keys_zone 名称区分。
三、Server 段完整配置
以下代码放入站点的 server { … } 块中(例如 /etc/nginx/conf.d/your-site.conf)。请务必将 set $backend 改为你的源站域名。
# 作者:站长帮(WenM)
# — 【Server 段】应用规则 —
# 安全过滤:拦截常见的自动化扫描程序后缀,直接返回 404
# 拦截:执行脚本(py/sh/pl)、备份文件(zip/sql/bak)、系统文件(ini/log/env)等
location ~* .(aspx?|jsp|py|sh|pl|perl|sql|bak|old|save|swp|git|env|log|config|ini|conf|zip|rar|tar|gz|7z|bz2|xz)$ {
return 404;
# access_log off;
# log_not_found off;
}
# 拦截以点开头的隐藏文件 (如 .git, .env, .htpasswd)
location ~* /.(?!well-known/) {
return 404;
# access_log off;
# log_not_found off;
}
# 拦截一些不需要公开的目录
location ~* ^/(wp-json/wp/v2/users|wp-content/languages|wp-content/cache) {
return 404;
}
# proxy_http_version 2; # H2 回源(仅 Nginx 1.30.0 以上版本支持)
proxy_http_version 1.1;
proxy_set_header Connection “”; # 清除 Connection 头以支持长连接/H2
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
set $backend “https://site.com”; # 这里填入正确的源站域名
# 缓存刷新接口,需要 Nginx 支持 ngx_cache_purge 模块
location ~ /purge(/.*) {
allow 127.0.0.1; # 允许访问的 IP(根据需要修改)
deny all;
proxy_cache_purge sitecache “$host$1$is_args$args”;
}
# 1. PHP 不缓存
location ~ .php$ {
proxy_pass $backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass 1;
proxy_no_cache 1;
}
# 2. 静态资源独立缓存
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg|webp|avif|woff|woff2|ttf|otf)$ {
proxy_pass $backend;
proxy_set_header Host $host;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 核心:忽略源站 Header,强制长缓存
proxy_ignore_headers Cache-Control Expires;
proxy_cache sitecache;
proxy_cache_key $host$uri$is_args$args;
# 静态资源缓存 120 天
proxy_cache_valid 200 302 120d;
proxy_cache_valid 404 1m;
# 判断是否缓存
proxy_cache_bypass $final_skip_cache;
proxy_no_cache $final_skip_cache;
# 浏览器端缓存控制
expires 365d;
add_header Cache-Control “public, no-transform”;
add_header X-Cache-Status $upstream_cache_status;
access_log off;
error_log off;
}
# 3. HTML 页面缓存
location ~* .html$ {
proxy_pass $backend;
# — IP 转发配置开始 —
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# — IP 转发配置结束 —
# 忽略源站 Header,如未启用登录/评论功能可添加忽略 Set-Cookie,缓存命中率更高
proxy_ignore_headers Cache-Control Expires;
proxy_cache sitecache;
proxy_cache_key $host$uri$is_args$args;
# HTML 缓存 24 小时
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 1m;
# 判断是否缓存
proxy_cache_bypass $final_skip_cache;
proxy_no_cache $final_skip_cache;
# 浏览器端缓存控制
expires 3m;
add_header Cache-Control “public, no-transform”;
# 临时添加,用于观察 Key 的结构
# add_header X-Cache-Key-Debug “$host$uri$is_args$args”;
add_header X-Cache-Status $upstream_cache_status;
}
# 4. 特定路径匹配(优先级低于 .html)
# 匹配:首页 /、/about、/privacy-policy
location ~* ^/(|about/?|privacy-policy/?)$ {
proxy_pass $backend;
# — IP 转发配置开始 —
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# — IP 转发配置结束 —
proxy_ignore_headers Cache-Control Expires;
proxy_cache sitecache;
proxy_cache_key $host$uri$is_args$args;
# 缓存 4 小时
proxy_cache_valid 200 302 4h;
proxy_cache_valid 404 1m;
# 判断是否缓存
proxy_cache_bypass $final_skip_cache;
proxy_no_cache $final_skip_cache;
# 浏览器端缓存控制
expires 3m;
add_header Cache-Control “public, no-transform”;
add_header X-Cache-Status $upstream_cache_status;
}
# 5. 特定分类匹配(优先级低于上述规则)
location ~* ^/(page|tag)/ {
proxy_pass $backend;
# — IP 转发配置开始 —
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# — IP 转发配置结束 —
proxy_ignore_headers Cache-Control Expires;
proxy_cache sitecache;
proxy_cache_key $host$uri$is_args$args;
# 缓存 12 小时
proxy_cache_valid 200 302 12h;
proxy_cache_valid 404 1m;
# 判断是否缓存
proxy_cache_bypass $final_skip_cache;
proxy_no_cache $final_skip_cache;
# 浏览器端缓存控制
expires 3m;
add_header Cache-Control “public, no-transform”;
add_header X-Cache-Status $upstream_cache_status;
}
# 6. 其它页面缓存(5 秒短暂缓存)
location / {
proxy_pass $backend;
# — IP 转发配置开始 —
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# — IP 转发配置结束 —
proxy_cache sitecache;
proxy_cache_key $host$uri$is_args$args;
# 强制忽略源站 Header,确保微缓存不受 WP 插件干扰
proxy_ignore_headers Cache-Control Expires;
# 5 秒微缓存 (抗 CC)
proxy_cache_valid 200 301 302 5s;
proxy_cache_valid 404 1m;
# 判断是否缓存
proxy_cache_bypass $final_skip_cache;
proxy_no_cache $final_skip_cache;
# 容错与调试
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
}
# — 【Server 段】应用规则结束 —
四、Server 段核心讲解
Server 段按照 请求类型 和 URI 特征 将流量分为多个 location 块,每一块都有独立的缓存时长和策略。Nginx 按照 自上而下 的顺序匹配,因此顺序很重要。
1. 安全过滤(开头三个 location)
规则作用.(aspx?|jsp|py|…)$拦截脚本、备份、压缩包等后缀,返回 404/.(?!well-known/)拦截以点开头的隐藏文件(如 .git, .env)^/(wp-json/wp/v2/users|wp-content/languages|…)屏蔽 WP 敏感目录,防止信息泄露
可根据实际需求增删后缀或路径。
2. 回源基础配置
proxy_http_version 1.1;
proxy_set_header Connection “”;
proxy_ssl_server_name on;
set $backend “https://site.com”; # 改为你的源站域名
使用 HTTP/1.1 并清除 Connection 头,支持 keepalive 复用连接。
proxy_ssl_server_name on 与 SNI 相关,如果源站是 HTTPS 且多域名,建议开启。
务必修改 $backend 变量,例如 set $backend “https://example.com”;
3. 分层缓存策略(按优先级排序)
① PHP 请求(location ~ .php$)









暂无评论内容