如何自己动手做一个迷你CDN?http_study之Nginx proxy_cache缓存完整实战
如何自己动手做一个迷你CDNhttp_study之Nginx proxy_cache缓存完整实战【免费下载链接】http_studyfollow me to study http项目地址: https://gitcode.com/gh_mirrors/ht/http_studyhttp_study是《透视HTTP协议》的配套开源项目基于 OpenRestyNginx 的 Lua 版增强体带你从零搭建一个可实测的迷你 CDN用 Nginx 的proxy_cache代理缓存把回源流量挡在边缘配合共享内存统计实时缓存命中率。本文带你完整走一遍环境准备 → 配置 CDN 缓存 → 验证 HIT/MISS的全流程。什么是迷你CDN缓存原理一图看懂真实 CDN 的本质是边缘节点缓存源站内容用户就近访问缓存副本。http_study 用一台机器模拟了这套架构角色域名职责CDN 边缘节点www.chrono.com接收用户请求proxy_cache缓存命中则直接返回源站Originorigin.io生成带服务器 ID的内容只有缓存未命中时才会被打到 两个域名都解析到127.0.0.1见项目根目录hosts文件用本地回环 域名区分模拟真实的边缘 源站部署这正是理解 CDN 最快的方式。环境准备最快启动 OpenResty 环境项目内置 Docker 方案基于 ubuntu 18.04 openresty 1.17.8.2两种启动方式任选其一方式一Docker 一键启动推荐新手git clone https://gitcode.com/gh_mirrors/ht/http_study cd http_study docker pull chronolaw/http_study docker run -it --rm chronolaw/http_study bash # 容器内执行 cat ~/http_study/hosts /etc/hosts cd ~/http_study/www ./run.sh start方式二本机 OpenResty# 将项目根目录 hosts 文件中的域名追加到 /etc/hosts cd http_study/www ./run.sh start # 封装了 openresty 启动见 www/run.sh启动后访问http://www.chrono.com能看到欢迎页说明 CDN 节点就绪 ✅核心配置详解proxy_cache 三步开启缓存整个迷你 CDN 的缓存能力由三处配置协作完成配置总入口是www/conf/nginx.conf自动 includewww/conf/http/下所有 conf。第 1 步声明缓存区域cache zone文件www/conf/http/cache.conf# 缓存区域磁盘目录 cache 64k 共享内存索引10 秒未访问即清理 proxy_cache_path cache keys_zonewww_cache:64k inactive10s; proxy_cache_lock on; # 并发回源只放一个请求其余等待复用 proxy_cache_revalidate on; # 缓存过期后先条件请求验证减少无效回源 proxy_force_ranges on; # 支持 Range 分片读取大文件第 2 步CDN 节点开启缓存代理文件www/conf/http/servers/locations.inc中的/proxy_cache/段location /proxy_cache/ { internal; # 内部 location只能被 ngx.exec 跳转进来 proxy_cache www_cache; # 挂上第 1 步定义的缓存区 proxy_cache_use_stale error timeout; # 源站出错/超时时返回旧缓存保命关键 proxy_pass http://origin.io; # 未命中时回源 }对比同文件中的/proxy/段——它只有proxy_pass没有proxy_cache正好可以演示开缓存 vs 不开缓存的差异非常适合做对照实验 第 3 步源站配合发送缓存响应头源站定义在www/conf/http/servers/origin.conf响应逻辑在www/lua/origin.lua。关键行为URI 中含cache时源站返回Cache-Control: public, max-age10, s-maxage30和ETag告诉 CDN缓存我 30 秒每个域名首次回源时生成一个 ID取当前时间戳后 4 位30 秒内保持同一 ID——ID 不变即证明你命中了缓存。动手验证用 curl 亲眼看到 MISS → HIT测试入口是两个 Lua 脚本通过curl 域名/脚本名触发入口脚本行为http://www.chrono.com/21-1www/lua/21-1.lua内部跳转到/proxy/纯代理、不走缓存http://www.chrono.com/22-1www/lua/22-1.lua内部跳转到/proxy_cache/走 proxy_cache 缓存连续两次请求 22-1观察响应头curl -I http://www.chrono.com/22-1 # X-Cache: MISS ← 首次回源拿到 ID 例如 ID is 3719 curl -I http://www.chrono.com/22-1 # X-Cache: HIT ← 缓存命中ID 保持不变源站零压力响应头由www/lua/cache_filter.lua在 header_filter 阶段注入它做了三件很专业的事X-Cache输出 Nginx 原生的upstream_cache_statusHIT/MISS/STALE…X-Accel标记请求命中的是哪台 CDN 节点真实 CDN 靠它做多节点排障X-Hit利用www/conf/http/resty.conf中定义的misc共享内存字典lua_shared_dict misc 64k累加总请求数和 HIT 数实时算出缓存命中率百分比——这是生产 CDN 监控的最小实现。再看源站侧logs/origin_access.log缓存生效期间日志不再增长说明回源请求被边缘成功拦截 常见坑与调优清单❌忘了配 hostsorigin.io无法解析OpenResty 直接解析失败origin.conf顶部有醒目注释提醒❌源站不发 Cache-Control/ETagproxy_cache默认只缓存 200/204/301/302 且无缓存头的响应 0 秒等于没缓存✅命中率低调大s-maxage或按 URI 用proxy_cache_key优化缓存键✅源站宕机页面全挂保留proxy_cache_use_stale error timeout让旧缓存续命✅回源风暴proxy_cache_lock on保证同一 key 并发只回源一次。小结这套迷你CDN教会了什么用不到 30 行核心配置http_study 就把真实 CDN 的骨架完整复刻了一遍proxy_cache_path定义缓存区域内存索引 磁盘文件proxy_cache把代理 location 挂到缓存区配合use_stale做可用性兜底缓存响应头Cache-Control / ETag决定缓存多久、如何验证共享内存 响应头实现命中率观测。掌握这套流程后把proxy_pass指向你的真实源站你就拥有了第一台属于自己的 CDN 节点。想继续深挖可以结合项目wireshark/目录下的抓包文件如21-1.pcapng、22-1相关报文观察回源请求在协议层的真实流转。【免费下载链接】http_studyfollow me to study http项目地址: https://gitcode.com/gh_mirrors/ht/http_study创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

B站视频下载:bilibili-downloader免费拉取4K源流

B站视频下载:bilibili-downloader免费拉取4K源流

B站视频下载:bilibili-downloader免费拉取4K源流 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 出差或飞行途中&#xff…

2026/8/22 14:45:07 阅读更多 →
gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获 【免费下载链接】grpc-errors A handy guide to gRPC errors 项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errors 学习 gRPC 错误处理时,新手最大的困惑就是不同语…

2026/8/23 15:08:00 阅读更多 →
Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析 【免费下载链接】git-xl Git extension: Makes git-diff work for VBA in Excel workbooks (xls* file types) 项目地址: https://gitcode.com/gh_mirrors/gi/git-xl Git XL 是一个开源的…

2026/8/23 16:27:23 阅读更多 →

最新新闻

人声模仿查询声音:微调策略如何跨越语义鸿沟实现精准检索

人声模仿查询声音:微调策略如何跨越语义鸿沟实现精准检索

你有没有试过,想找一个特定的声音,却怎么也描述不清楚?比如,你想找一段“风吹过竹林,竹叶沙沙作响,同时远处有隐约的鸟鸣”的音频,或者一段“老式打字机快速敲击,中间夹杂着纸张翻页…

2026/8/23 17:09:20 阅读更多 →
Fluent XAML Theme Editor 源码架构深剖:MVVM 分层、共享库与依赖注入完整拆解

Fluent XAML Theme Editor 源码架构深剖:MVVM 分层、共享库与依赖注入完整拆解

Fluent XAML Theme Editor 源码架构深剖:MVVM 分层、共享库与依赖注入完整拆解 【免费下载链接】fluent-xaml-theme-editor The Fluent Design XAML theme editor. 项目地址: https://gitcode.com/gh_mirrors/fl/fluent-xaml-theme-editor Fluent XAML Theme…

2026/8/23 17:09:20 阅读更多 →
深入LiteRT-LM:.litertlm模型文件格式全景揭秘

深入LiteRT-LM:.litertlm模型文件格式全景揭秘

深入LiteRT-LM:.litertlm模型文件格式全景揭秘 【免费下载链接】LiteRT-LM LiteRT-LM is Googles production-ready, high-performance, open-source inference framework for deploying Large Language Models on edge devices. 项目地址: https://gitcode.com/G…

2026/8/23 17:09:20 阅读更多 →
mirrors/ali-vilab/text-to-video-ms-1.7b社区问答:100个高频问题的技术解答汇总

mirrors/ali-vilab/text-to-video-ms-1.7b社区问答:100个高频问题的技术解答汇总

mirrors/ali-vilab/text-to-video-ms-1.7b社区问答:100个高频问题的技术解答汇总 【免费下载链接】text-to-video-ms-1.7b 项目地址: https://ai.gitcode.com/hf_mirrors/ali-vilab/text-to-video-ms-1.7b 本文围绕 ModelScope(达摩院&#xff0…

2026/8/23 17:09:20 阅读更多 →
Maka Agent深度研究功能怎么用?从联网调研到完整报告的流程全解析

Maka Agent深度研究功能怎么用?从联网调研到完整报告的流程全解析

Maka Agent深度研究功能怎么用?从联网调研到完整报告的流程全解析 【免费下载链接】maka Apache Maka (Incubating) is a local-first AI agent workspace. Model messages, tool calls, tool results, permission decisions, and termination events are recorded …

2026/8/23 17:09:20 阅读更多 →
信息学竞赛必备数学符号全解:从基础运算到复杂度分析

信息学竞赛必备数学符号全解:从基础运算到复杂度分析

1. 项目概述:为什么OI选手必须啃下数学符号这块硬骨头刚接触信息学竞赛(OI)那会儿,我总觉得算法和数据结构是硬核,数学符号不过是些花里胡哨的“装饰”。直到在赛场上,因为把一个求和符号Σ的下标看错&…

2026/8/23 17:08:20 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →