Nginx不仅可以作为静态内容服务器,还能高效地缓存动态内容,显著减轻后端应用服务器的负载。以下是实现动态内容缓存的详细方法:
在Nginx配置文件中(http或server块)添加缓存设置:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
# ...
location / {
proxy_cache my_cache;
proxy_pass http://backend;
# 缓存有效期为10分钟
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 设置缓存键
proxy_cache_key "$scheme$request_method$host$request_uri";
}
}
location / {
proxy_cache my_cache;
proxy_pass http://backend;
# 仅当后端返回特定头时才缓存
proxy_cache_bypass $http_cache_control;
proxy_no_cache $http_pragma $http_authorization;
# 使用后端返回的Cache-Control头
proxy_ignore_headers Cache-Control;
}
location / {
proxy_cache my_cache;
proxy_pass http://backend;
# 缓存锁定(防止多个请求同时更新缓存)
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
# 当缓存更新时使用旧缓存
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 后台更新缓存
proxy_cache_background_update on;
}
map $request_method $cacheable {
default 0;
GET 1;
HEAD 1;
}
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
# 仅缓存GET和HEAD请求
proxy_cache $cacheable;
}
}
location ~* ^/dynamic-content/ {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 5m;
}
location ~* ^/no-cache/ {
proxy_pass http://backend;
proxy_no_cache 1;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
可以使用Nginx的proxy_cache_purge
模块或第三方模块如ngx_cache_purge
来实现自动清除。
location /nginx-cache-status {
allow 127.0.0.1;
deny all;
proxy_cache_stats on;
access_log off;
}
keys_zone
大小应根据缓存键数量调整inactive
参数控制缓存未被访问的保留时间curl -I
检查X-Cache
头确认缓存命中情况proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=dynamic_cache:50m inactive=12h use_temp_path=off max_size=2g;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_cache dynamic_cache;
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
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;
add_header X-Cache-Status $upstream_cache_status;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge dynamic_cache "$scheme$request_method$host$1";
}
}
通过以上配置,Nginx可以高效地缓存动态内容,显著提升网站性能并降低后端服务器负载。