Nginx Proxy Manager (NPM) 是一个基于 Nginx 的图形化管理工具,可以方便地配置反向代理、SSL 证书等。要实现 HTTP 请求的缓存加速,可以通过以下步骤配置:
在 NPM 中可以通过自定义 Nginx 配置来实现缓存:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
# ... 其他配置保持不变
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
# 其他代理配置
proxy_pass http://backend;
}
}
proxy_cache_path
: 定义缓存存储路径和区域
/var/cache/nginx
: 缓存存储路径levels=1:2
: 目录层级结构keys_zone=my_cache:10m
: 定义共享内存区域名称和大小inactive=60m
: 60分钟内未被访问的缓存将被删除use_temp_path=off
: 不使用临时路径proxy_cache
: 指定使用的缓存区域
proxy_cache_valid
: 定义不同响应码的缓存时间
200 302 10m
: 成功和重定向响应缓存10分钟404 1m
: 404响应缓存1分钟proxy_cache_use_stale
: 当后端出现问题时使用过期缓存
proxy_cache_background_update
: 后台更新过期缓存
proxy_cache_lock
: 启用缓存锁防止多个请求同时更新同一缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
proxy_cache my_cache;
proxy_cache_valid 200 302 12h;
expires 7d;
add_header Cache-Control "public";
}
location / {
# 不缓存POST请求
if ($request_method = POST) {
set $no_cache 1;
}
# 不缓存带特定参数的请求
if ($query_string ~* "nocache") {
set $no_cache 1;
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
proxy_cache my_cache;
# ... 其他缓存配置
}
可以通过添加以下配置实现缓存清除:
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
在 Nginx 配置中添加:
server {
location /nginx_status {
stub_status;
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
}
}
然后可以通过 http://yourdomain.com/nginx_status
查看状态,其中包含缓存命中信息。
keys_zone
大小通过以上配置,可以显著提高网站的响应速度,减轻后端服务器负载,特别是在静态资源较多的场景下效果更为明显。