nginx前端图片缓存
背景
高频接口和高频前端图片都部署在后端,历史原因,研发不想改代码做前段后分离,我这边做nginx缓存固定路径下的前端图片。
环境确认
需要缓存的图片路径
123.123.123.123:8888端口下的图片路径是:/web/portal-web/images/
该目录下有多张图片和多级目录,不同目录下也有很多图片
配置
http模块下配置(nginx.conf)
proxy_cache_path /apps/data/nginx/nginx_cache levels=1:2 keys_zone=assets_cache:50m inactive=1d max_size=30g;
解读:
/apps/data/nginx/nginx_cache:这是缓存文件存放的实际物理路径。Nginx会将从后端服务器获取并缓存的内容保存到这个目录下。
levels=1:2:这指定了缓存文件在磁盘上的层级结构。1:2表示使用两级子目录来存储缓存文件。第一级有一个子目录,第二级有两个子目录。这种分层结构有助于提高大容量缓存时的性能,因为可以减少单个目录下的文件数量。例如,一个请求可能被存储为/apps/data/nginx/nginx_cache/0f/4c/...的形式。
keys_zone=assets_cache:50m:keys_zone定义了一个共享内存区域,用于存储缓存键及其元数据(如过期时间)。assets_cache是该内存区域的名字,而50m是指定分配给这个内存区域的大小,这里是50MB。这个内存区域能够帮助Nginx快速查找缓存项是否存在于磁盘上,而无需每次都访问磁盘。
inactive=1d:此参数设置了一个时间段,在这段时间内如果没有对某个缓存项进行任何访问,则该缓存项会被认为是不活跃的,并且可以在必要时被移除以腾出空间。这里的1d表示1天。这意味着如果某项缓存在一天内没有被访问,它就可能被删除。
max_size=30g:这设置了缓存的最大允许大小。当缓存达到这个限制时,Nginx会开始删除最旧的(或最少使用的)缓存条目以释放空间。这里的30g表示最大缓存大小为30GB。
确保缓存的路径nginx用户有执行权限
chown -R nginx:nginx /apps/data/nginx/nginx_cache
server模块下配置(nginx.conf)
location /web/portal-web/images/ {
proxy_cache assets_cache;
proxy_cache_valid 200 304 1h;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1m;
proxy_cache_key $uri$is_args$args;
expires 1d;
client_max_body_size 500M;
add_header X-Cache $upstream_cache_status;
proxy_pass http://123.123.123.123:8888;
}
注意:add_header Cache-Control no-cache;该条不能配置,不然缓存不生效!!!
修改日志格式
log_format ddd '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr" "$upstream_cache_status" "$request_time"';
...
...
access_log /path/to/access.log ddd;
打印出$upstream_cache_status,可以通过该参数看到是否有命中缓存。
检验配置
/path/to/bin/nginx -t -c /path/to/conf/nginx.conf
检查配置是否正确,没问题后,reload下nginx服务。
效果
成功打到缓存:
失败,没打到缓存
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤