Nginx提供了强大的缓存控制功能,可以显著提高网站性能。以下是配置Nginx进行HTTP请求缓存控制的详细方法:
http {
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;
# 缓存键设置
proxy_cache_key "$scheme$request_method$host$request_uri";
# 缓存有效时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
}
proxy_cache_path
: 定义缓存路径和区域
levels
: 缓存目录层级结构keys_zone
: 定义共享内存区域名称和大小inactive
: 缓存未被访问的保留时间use_temp_path
: 是否使用临时路径proxy_cache_valid
: 为不同响应码设置缓存时间
location / {
proxy_cache_bypass $http_cache_control;
proxy_no_cache $http_pragma $http_authorization;
}
location / {
# 仅当后端返回特定头部时才缓存
proxy_cache my_cache;
proxy_cache_bypass $http_cache_control;
proxy_cache_valid 200 302 10m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 设置Vary头部正确处理内容协商
proxy_ignore_headers Vary;
add_header Vary "Accept-Encoding";
}
location / {
proxy_cache_lock on;
proxy_cache_lock_age 5s;
proxy_cache_lock_timeout 5s;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
location /static/ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
location / {
proxy_cache_purge PURGE from 127.0.0.1;
}
nginx -T
检查配置,监控缓存命中率location / {
add_header X-Cache-Status $upstream_cache_status;
}
这个头部会显示请求是否命中缓存:
- HIT
: 缓存命中
- MISS
: 缓存未命中
- EXPIRED
: 缓存过期
- UPDATING
: 缓存正在更新
- STALE
: 使用过期的缓存
- BYPASS
: 缓存被绕过
通过合理配置Nginx缓存,可以显著减少后端服务器负载并提高网站响应速度。