优化Nginx缓存策略是提升Ubuntu服务器性能、减少后端负载的关键手段,主要涵盖静态资源缓存、代理缓存配置、缓存参数调优及验证监控四大环节。以下是具体步骤:
静态资源(如图片、CSS、JS、字体等)具有访问频率高、内容变化少的特点,适合通过expires和open_file_cache指令实现长期缓存。
server或location块中,针对静态资源扩展名(如jpg|jpeg|png|gif|ico|css|js)配置expires和Cache-Control头,强制浏览器缓存资源。例如:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; # 缓存1年
add_header Cache-Control "public, max-age=31536000"; # 允许公共缓存
}
open_file_cache指令缓存文件元数据(如路径、大小、修改时间),减少磁盘IO。建议配置:open_file_cache max=1000 inactive=20s; # 最大缓存1000个文件,20秒未访问则失效
open_file_cache_valid 30s; # 每30秒验证缓存有效性
open_file_cache_min_uses 2; # 文件被访问2次后才缓存
对于动态内容(如PHP、API接口),可通过proxy_cache模块缓存后端响应,减少重复请求到应用服务器的开销。
http块中配置缓存存储路径、内存区域及大小。关键参数说明:
keys_zone:缓存区域名称(如my_cache),用于proxy_cache指令引用;max_size:缓存最大容量(如10g),超过后自动清理旧文件;inactive:缓存项未被访问的时间阈值(如60m),超时则删除。proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
location块中指定缓存区域,并设置不同状态码的缓存时间:location / {
proxy_cache my_cache; # 使用名为my_cache的缓存区域
proxy_pass http://backend_server; # 后端服务器地址
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
add_header X-Proxy-Cache $upstream_cache_status; # 显示缓存状态(HIT/MISS/BYPASS)
}
根据业务需求调整缓存策略的细节,避免过度缓存或缓存不足:
$scheme$proxy_host$request_uri(协议+域名+URI),若需排除查询参数(如?utm_source=xxx),可修改为:proxy_cache_key "$scheme$proxy_host$request_uri"; # 默认,包含查询参数
# 或
proxy_cache_key "$scheme$proxy_host$request_uri$is_args$args"; # 包含查询参数
proxy_cache_bypass和proxy_no_cache指令,在特定条件下绕过缓存(如实时数据、用户登录状态):proxy_cache_bypass $http_pragma $http_authorization; # 当请求包含Pragma或Authorization头时绕过缓存
proxy_no_cache $http_pragma $http_authorization; # 同上,不缓存此类响应
proxy_cache_revalidate,让Nginx在缓存过期前向后台验证资源是否更新,避免返回过期内容:proxy_cache_revalidate on; # 开启缓存重新验证
X-Proxy-Cache: HIT则表示缓存命中,MISS表示未命中。access_log中添加$upstream_cache_status字段,记录缓存状态:log_format cache_log '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$upstream_cache_status"';
access_log /var/log/nginx/cache.log cache_log;
/var/cache/nginx目录的大小,避免占用过多磁盘空间:du -sh /var/cache/nginx
若需要主动清除缓存(如更新静态资源后),可安装ngx_cache_purge模块:
git clone https://github.com/arut/nginx-cache-purge.git
cd nginx-cache-purge
sudo apt install libpcre3 libpcre3-dev zlib1g-dev make gcc
sudo ./configure --add-module=/path/to/nginx-cache-purge
sudo make
sudo make install
server块中添加缓存清除路径(仅允许本地IP访问):location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge my_cache $1; # 清除指定路径的缓存
}
http://your_domain.com/purge/path/to/file即可清除对应缓存。通过以上步骤,可显著提升Ubuntu服务器上Nginx的缓存效率,降低后端负载,提高页面加载速度。需根据实际业务场景(如静态资源占比、动态内容更新频率)调整缓存时间、路径等参数,达到最佳性能平衡。