发布时间:2026/8/22 14:45:42
如何自己动手做一个迷你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),仅供参考

相关新闻

2026/8/22 14:45:42

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

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

2026/8/22 15:55:46

SSD发展简史:从1980年到2026年,固态硬盘46年进化全记录

摘要: 本文梳理SSD从1980年代诞生到2026年的完整发展历程——从早期的军工/航天应用到消费市场普及,从SLC独占到3D NAND QLC量产,从SATA瓶颈到PCIe 5.0破万MB/s。通过关键时间节点、里程碑产品和转折事件,帮你建立SSD技术演进的宏…

2026/8/22 15:55:46

PS1 存档如何管理?MemcardRex 记忆卡编辑完整指南

PS1 存档如何管理?MemcardRex 记忆卡编辑完整指南 【免费下载链接】memcardrex Advanced PlayStation 1 Memory Card editor 项目地址: https://gitcode.com/gh_mirrors/me/memcardrex MemcardRex 是一款 PS1 记忆卡管理工具,覆盖记忆卡文件打开、…

2026/8/22 15:55:45

点了停止,模型为什么还可能继续跑

按钮、浏览器、SSE 服务和上游模型,是四个不同的停止边界。 摘要| 我沿 Microi吾码当前 AI 流式链路,从停止按钮追到 AbortController、SSE、服务端和上游调用。结论:点击停止可结束浏览器读取;只有取消信号继续穿过服…

2026/8/22 15:55:45

DM在水平分区表建立索引:提升大数据环境下查询性能的关键技术

一、DM水平分区表建立索引概述 1.1 DM数据库分区表的基本概念 DM数据库作为中国自主研发的数据库管理系统,其分区表技术允许将大型表数据分散存储在多个物理分区中,从而提高数据管理效率和查询性能。水平分区表是指按照特定条件将表的数据行划分到不同的…

2026/8/22 15:55:45

她把最后一颗种子送进风暴:18秒如何讲清选择与代价

一颗种子、一个拉杆、一次个人记忆的熄灭:18秒只保留能改变世界的动作。 摘要| 《风眼种库》是一支原创18秒横屏电影短片:风暴逼近,21岁亚洲成年种库工程师必须在保住个人档案与重启城市清洁空气核心之间选择。她拉下释放杆&#…

2026/8/22 15:50:45

题解:洛谷 P1697 [USACO18JAN] Lifeguards B

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/22 1:39:53

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…