在使用 Nginx 时,通常不仅希望为静态资源配置缓存,还希望为代理请求(proxy)配置缓存,以便更好地优化网站性能。下面是如何在 Nginx 中同时配置静态资源缓存和代理缓存的方法:
1. 配置静态资源缓存
首先,按照之前所提到的方式,为静态资源设置缓存:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
2. 配置代理缓存
在配置代理缓存时,我们需要为代理请求设置缓存区域,并指定缓存条件。
2.1 定义缓存区域
在 http
上下文中定义一个缓存区域:
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
...
}
/var/cache/nginx
是缓存文件存储的路径,需要确保 Nginx 运行用户对其有足够的权限。levels=1:2
决定了缓存键存储目录的层级。keys_zone=my_cache:10m
定义了缓存区域的名称和内存使用大小。inactive=60m
设置了如果在此时间段内没有被访问,缓存将被删除。use_temp_path=off
默认使用缓存路径而不是临时路径。
2.2 配置代理缓存
然后,在 server
或 location
块中使用此缓存区域:
location / {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
proxy_pass http://backend_server
指定了代理的后端服务器地址。proxy_cache my_cache
启用了之前定义的缓存区域。proxy_cache_valid
定义了不同 HTTP 状态码的缓存时间,例如 200 和 302 状态码被缓存 10 分钟,而 404 状态码只缓存 1 分钟。add_header X-Proxy-Cache $upstream_cache_status
用于在响应头中显示缓存状态(HIT, MISS, BYPASS 等),这在调试时很有用。
3. 测试和重新加载配置
配置完毕后,使用以下命令测试配置:
如果测试通过,重新加载 Nginx:
sudo systemctl reload nginx
通过以上步骤,你可以在 Nginx 中同时实现对静态资源和代理请求的缓存管理,提升整体网站性能和响应速度。