- 博客(33)
- 收藏
- 关注
原创 22. NGINX 线程池深入解析:从 aio 场景到高性能实践
本文深入探讨了NGINX线程池的工作原理及其在高并发场景中的应用。线程池通过将阻塞式I/O操作卸载到独立线程,有效解决了磁盘I/O对worker进程的阻塞问题。文章详细介绍了基础配置方法,包括thread_pool和aio threads指令的使用,并提供了静态文件服务和反向代理缓存的配置示例。此外,还展示了线程池的高级用法,如自定义线程池、分片下载优化,以及模块开发实战——构建异步图片处理模块,通过线程池API实现动态缩略图生成服务。这些方案能显著提升NGINX在磁盘I/O密集场景下的性能表现。
2026-08-03 17:53:12
392
原创 HTTP 缓存协议深度解析:状态码与Header
本文系统梳理了HTTP缓存机制,重点解析了强缓存和协商缓存的原理及实现方式。强缓存通过Cache-Control(max-age)和Expires控制,有效期内直接从本地读取(200 from cache);协商缓存通过Last-Modified/If-Modified-Since和ETag/If-None-Match实现,服务器验证后返回304(使用缓存)或200(返回新内容)。文章还介绍了206分块请求、412等状态码,并通过流程图和报文示例详细展示了缓存决策全过程,帮助开发者从原理层面掌握HTTP缓存
2026-07-24 17:15:46
534
原创 21. 深入 Nginx HTTP 缓存源码:CDN功能
本文从源码角度分析了Nginx HTTP缓存的核心实现机制。主要内容包括: 缓存内存组织结构:Nginx使用共享内存存储缓存索引,包含红黑树(快速查找)和LRU队列(淘汰顺序)两种数据结构。每个缓存条目对应一个节点,存储CRC32校验值、引用计数、访问次数等元信息。 内存淘汰策略:当内存不足时,Nginx采用LRU算法从队列尾部开始淘汰,优先移除引用计数为0的节点。节点正在使用时会被移到队列头部避免被误删。 缓存管理机制:Cache Manager进程负责扫描磁盘文件,根据inactive参数清理过期缓存。
2026-07-22 19:25:27
622
原创 AMS1117 LDO 稳压器详解与注意事项
AMS1117是一款经典的低压差线性稳压器(LDO),广泛应用于嵌入式系统和消费电子设备中。它通过负反馈系统实现稳压,具有1.1V典型压差、1A输出电流和内置保护功能等特性。输出端必须使用钽电容(10μF~100μF),其等效串联电阻(ESR)能提供关键零点补偿,抑制振荡。若使用低ESR的陶瓷电容,需串联0.5Ω~1Ω电阻。实际应用中需注意输入/输出电容选择、散热问题(功耗计算和散热措施),以及避免输入电压过高或反接。这些要点确保了AMS1117的稳定工作和可靠性。
2026-07-20 18:31:57
329
原创 20. 深入 Nginx 信号处理
本文深入分析了 Nginx 的信号处理机制,重点探讨了其 master-worker 进程模型下如何通过信号实现热更新、配置重载和优雅关闭等关键功能。Nginx 的 master 进程通过注册信号处理函数 ngx_signal_handler() 捕获信号,并在主循环中根据标志位执行相应操作,如重启 worker 进程(SIGHUP)、热更新二进制文件(SIGUSR2)或优雅关闭(SIGQUIT)。Worker 进程则响应 master 发送的信号,完成请求处理和资源释放。文章结合源码详细解析了信号注册、处
2026-07-20 18:21:05
464
原创 Docker 镜像瘦身:使用 Maven 拆分 Jar 包
本文介绍了一种优化微服务Docker镜像体积的方法。通过将公共依赖提取到基础镜像,每个微服务只需打包业务代码层,大幅减少镜像体积。具体步骤包括:使用Maven插件将Jar拆分为公共依赖和业务代码,构建基础镜像存放公共依赖,微服务镜像基于基础镜像仅添加业务层。相比传统Fat Jar方式,该方法可显著节省磁盘空间和部署时间。文章还提供了Maven配置示例、Dockerfile编写指南,并对比了优化前后的镜像大小差异,同时建议考虑Spring Boot Layertools进行更精细的分层优化。
2026-07-17 17:24:35
944
1
原创 19. Nginx Stream 模块开发:从入门到实战
本文深入探讨了Nginx Stream模块的开发方法,从核心架构到实际开发实践。首先介绍了Stream模块的基本概念和与HTTP模块的关键区别,重点分析了其核心数据结构ngx_stream_session_s的生命周期和模块接口。文章随后详细讲解了模块开发的核心流程,包括模块结构体定义、会话处理函数和配置指令注册方法。最后通过一个完整的Stream日志模块开发示例,展示了如何实现连接事件记录功能。该模块能够记录TCP连接的客户端IP、端口、时长等关键信息,为开发者提供了Stream模块开发的实用参考框架。
2026-07-17 17:11:05
437
原创 18. Nginx 限流模块源码深度解析:limit_conn / limit_req / limit_rate 实现原理
本文深入分析Nginx的三大限流模块:连接数限制(limit_conn)、请求速率限制(limit_req)和响应速率限制(limit_rate)。重点剖析了前两者的实现机制:limit_conn基于红黑树和LRU队列精确控制并发连接数;limit_req采用改进的漏桶算法,通过时间戳计算请求配额,支持突发流量处理。两者都通过共享内存实现多worker进程协同,并在NGX_HTTP_PREACCESS_PHASE阶段执行限流判断。文章通过核心数据结构和源码片段,揭示了Nginx限流模块的高效实现原理。
2026-07-15 17:04:57
609
原创 17. 深入 Nginx 源码:SSL 模块的设计
Nginx SSL模块设计解析:从架构到实现 摘要: 本文深入分析了Nginx SSL/TLS支持的两大核心设计。首先探讨了模块无感设计,通过ngx_connection_t结构体和策略模式实现SSL透明化,上层模块无需感知底层加密细节。其次详细剖析了客户端SSL连接建立流程,包括事件驱动的握手机制,展示了Nginx如何通过ngx_ssl_handshake函数实现非阻塞SSL握手。文章揭示了Nginx通过连接抽象层和事件驱动架构实现的高效SSL处理机制,体现了其模块化设计的精妙之处。阅读本文可深入理解Ng
2026-07-14 16:51:33
674
原创 16. 深入 Nginx 源码:HTTP 请求解析之旅
本文深入解析了 Nginx 1.24.0 中 HTTP 请求解析的核心机制,重点分析了请求行和请求头的解析过程。文章首先介绍了 Nginx 采用事件驱动和状态机模型实现高效解析的基本原理,然后详细剖析了核心数据结构 ngx_http_request_t 的关键字段。通过状态机流程图和代码片段,展示了请求行解析的完整状态流转过程,包括从初始状态到方法名、URI 和 HTTP 版本号的逐步解析。这种边读取边解析的方式充分体现了 Nginx 高性能设计的关键所在。
2026-07-13 17:24:39
517
原创 Docker 多阶段构建深度实战:Nginx Ingress Controller 的三阶段源码构建
本文介绍了使用Docker三阶段构建方法制作高效Nginx Ingress Controller镜像的技术方案。通过将构建过程划分为GCC编译Nginx、Golang编译Controller和运行时整合三个阶段,实现了构建环境与运行环境的完全隔离。该方法相比传统单阶段构建,可将镜像体积从1.5GB缩减至50MB左右,提升30倍的存储和传输效率,同时显著降低安全风险。文章详细讲解了每个阶段的设计要点,包括依赖管理、二进制优化和最小化运行时环境配置,为构建生产级云原生组件提供了最佳实践参考。
2026-07-12 21:32:03
590
原创 15. Nginx HTTP Filter 开发实战:Header 与 Body Filter全解析
本文详细介绍了如何开发 Nginx HTTP Filter 模块,重点讲解了 header filter 和 body filter 的实现方法。文章首先阐述了 Filter 模块在 Nginx 处理流程中的定位,指出其工作在请求/响应处理链条上,可对所有经过的数据进行透明加工。接着通过两个实战案例展开:header filter 部分演示了如何为所有响应添加安全相关的标准头部(如 X-Content-Type-Options);body filter 部分则展示了响应体内容替换的实现,包括上下文管理、分块
2026-07-12 21:22:32
395
原创 14. 深入 Nginx 事件模块:从源码到实战的 event 用法详解
前面我们实现了延迟响应模块的核心逻辑,本节将补全模块的编译与集成细节,让你能够真正跑起来。将以下完整代码追加到/* 模块指令定义 */0,NULL },/* 模块上下文 *//* 模块定义 *//* delay 指令解析函数 *//* 创建 location 配置 *//* 合并 location 配置 */delay指令仅允许在location块内出现(),接收一个时间参数。可以解析50005s5000ms等形式,统一转为毫秒存入delay。
2026-07-10 17:23:11
614
原创 Linux X11 串流到 Windows Xming:原理与实践
本文介绍了如何在Windows主机上通过Xming和Docker容器实现Linux图形界面程序的远程显示。主要内容包括: X11协议原理:采用C/S架构,实现网络透明性,允许远程X客户端程序在本地X服务端显示窗口。 环境搭建: Windows安装Xming作为X11服务端 Docker Desktop配置WSL2后端 VS Code安装Dev Containers扩展 容器构建: 基于Ubuntu 22.04创建包含Qt6、X11工具和中文字体的Docker镜像 通过Dev Container配置文件设置D
2026-07-09 17:22:24
797
原创 13. 深入 Nginx 日志模块:源码与开发实战
/ 编译后的操作链// 原始操作数组// 参数(变量名等)// ...Nginx 将log_format定义的组合字符串(如)编译成一系列操作,运行时遍历操作链生成日志行。# 全局仅输出警告及以上events {http {server {listen 80;# 为当前虚拟主机打开 info 级别错误日志root html;# 仅记录状态码 >= 400 的请求到独立文件。
2026-07-09 17:09:28
486
原创 Dev Containers 实战:告别环境搭建噩梦
(开发容器)是 Visual Studio Code 的一项核心功能,允许开发者使用Docker 容器作为完整的开发环境。整个项目的工具链、依赖、配置甚至 VS Code 插件都预装在容器中,开发者只需打开项目文件夹,剩下的事情交给 Dev Containers 自动完成。它的工作流程如下:fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;是否。
2026-07-08 16:49:38
513
原创 12. 深入理解 Nginx 内存管理:ngx_pool_t与ngx_slab_pool_t源码解析
Nginx 内存池机制(ngx_pool_t)虽提升性能却增加调试难度,OpenResty 的 no_pool 补丁通过禁用内存池将分配转为标准 malloc/free,使 Valgrind 和 ASan 等工具能精准检测内存泄漏和越界问题。本文解析了 ngx_pool_t 结构,介绍了 no_pool 的实现原理与使用方法,并通过案例展示如何结合内存工具进行高效调试,最后探讨了 Nginx Zone 共享内存的分配机制。
2026-07-08 16:38:16
335
原创 局域网直通docker容器网络实践
本文演示了在Fedora上,通过禁用 Docker 自带的 NAT 规则、手工配置iptablesFORWARD 规则以及客户端静态路由,成功将默认桥接网络下的容器 IP()暴露给物理网络(),实现“扁平网络”效果。客户端可以直接使用克隆 Gitea 仓库,体现了Linux 内核路由能力替代 Docker 内置 NAT 的强大灵活性。这种架构适用于需要固定容器 IP、且不希望大量端口映射的中小型生产环境。
2026-07-07 17:35:17
624
原创 11. Nginx 源码解析:location 预处理流程
Nginx的location指令优先级与匹配机制解析 本文深入分析了Nginx中location指令的匹配机制,重点解析了精确匹配、前缀匹配和正则匹配的处理流程。文章从核心数据结构入手,详细介绍了ngx_http_location_tree_node和ngx_http_core_loc_conf_t等关键结构体。通过源码分析,揭示了Nginx在配置解析阶段对location的分类处理过程,包括将location划分为精确匹配、前缀匹配和正则匹配三类。特别阐述了前缀查找树(BST)的构建逻辑,以及正则loca
2026-07-07 17:09:11
902
原创 10. Nginx 模块开发:Reload 时复用 Zone 数据
本文介绍了一种在Nginx模块开发中实现共享内存Zone数据持久化的高效方法。通过利用init_zone回调的data参数直接访问旧Zone内存,可在reload时实现内存到内存的数据迁移,避免磁盘I/O。文章详细阐述了核心原理:reload时新旧Zone的生命周期、直接内存复制的优势(零磁盘I/O、原子性和可靠性)。代码实现部分展示了关键数据结构定义和核心逻辑——在ngx_http_zone_clone_init_zone函数中,通过遍历旧Zone红黑树将节点直接复制到新Zone。这种方法特别适用于对性能
2026-07-06 17:07:37
311
原创 9. Nginx 模块开发:模块类型区别与实例代码详解
本文概述了Nginx模块化开发的三种核心范式:核心模块、事件模块和HTTP模块。核心模块负责全局配置,需实现ngx_core_module_t结构体;事件模块封装I/O复用模型,需提供ngx_event_actions_t回调函数;HTTP模块分为Handler、Filter和Upstream三类,其中Handler模块通过实现请求处理函数来生成响应内容。每种模块类型都有特定的注册方式和编译配置要求,开发者需要根据功能需求选择合适的模块类型进行开发。
2026-07-05 16:41:46
215
原创 grpc与业务代码隔离:java实战
在现代微服务架构中,gRPC 凭借其高性能、跨语言和强大的接口定义能力,成为服务间通信的热门选择。但在实际 Java 项目中,往往希望对外暴露 HTTP 接口,而内部服务调用则使用 gRPC。本文将以一个真实的多模块项目为例,讲解如何用 Spring Boot + gRPC 搭建「HTTP 入口 + gRPC 内部调用」的开发模板。我们将构建一个包含三个模块的 Maven 工程:所有代码使用统一包名 ,gRPC 通信统一使用 ,非常适合本地开发、演示以及作为项目骨架。读完本文,你将能够:工具及版本:最终技术
2026-07-05 16:09:59
514
原创 8. Nginx Upstream 开发教程:从核心结构体到自定义负载均衡算法
本文深入解析了Nginx upstream模块的核心数据结构与默认加权轮询算法,并指导如何实现自定义负载均衡模块。首先剖析了三个关键结构体:ngx_http_upstream_rr_peer_t(单节点信息)、ngx_http_upstream_rr_peers_t(节点集合)和ngx_http_upstream_rr_peer_data_t(请求选择状态)。然后详细解读了Nginx的平滑加权轮询算法实现,包括权重动态调整机制和节点选择流程。该算法通过current_weight的累加与减总权重操作,实现了
2026-07-03 18:39:10
702
原创 7. Nginx subrequest 机制源码分析与模块开发实战
本文深入解析了Nginx subrequest子请求机制的源码实现与模块开发。文章首先剖析了核心数据结构ngx_http_request_t和关键函数ngx_http_subrequest的调用链,揭示了父子请求关系、内存池管理等底层机制。随后提供了两个实用开发示例:单子请求处理模块和并行子请求聚合模块(BFF场景),涵盖配置编译、响应捕获、引用计数等完整实现细节。通过源码分析与实例结合,帮助开发者掌握在Nginx模块中高效使用subrequest进行请求分派、内容聚合等高级功能的能力,并附有GDB调试技巧
2026-07-02 18:19:26
311
原创 6. 深入 Nginx 核心:HTTP 11 个处理阶段与模块开发实战
本文深入解析了Nginx处理HTTP请求的11个关键阶段,从请求头读取到日志记录的全生命周期,并提供了源码级别的分析。重点介绍了各阶段的执行时机、典型用途和核心实现位置,如POST_READ阶段处理请求头、REWRITE阶段进行URL重写、ACCESS阶段实现访问控制等。文章还包含一个完整的Nginx模块开发实战,通过ngx_http_hello_phase_module示例演示如何在特定阶段插入处理逻辑,帮助开发者掌握模块化开发技术。文中附有处理流程图和关键代码片段,是理解Nginx内部机制和进行高级定制
2026-07-01 22:07:11
307
原创 5. Nginx 模块开发入门:深入理解 ngx_http_request_t 结构体
摘要 本文深入解析了Nginx HTTP模块开发中的核心结构体ngx_http_request_t,重点介绍了其关键字段和实际应用。文章首先对结构体进行了分类概述,包括请求基本信息、请求头、请求体、连接与上下文等几大类型。随后详细讲解了常用字段如args(查询参数)、method_name(请求方法)、headers_in/out(请求/响应头)等的功能及典型用法,并提供了代码示例。特别对HTTPS相关字段如SSL连接信息进行了专门说明。最后,文章通过一个完整的Nginx模块示例,展示了如何在实际开发中运用
2026-06-30 22:41:08
319
原创 Git Submodule 实战:基于 Nginx 二次开发的高效协作方案
Submodule 允许你将一个外部的 Git 仓库(如 Nginx 主线源码)嵌入到你自己的项目仓库中。嵌入的仓库在父仓库中只是一个链接(一个特殊的 Git 对象),记录了它当前指向的特定提交(commit)。在# 创建自定义模块目录 mkdir -p my_modules/ngx_http_hello_module # 创建模块源码文件 cat > my_modules/ngx_http_hello_module/ngx_http_hello_module.c << 'EOF'EOF。
2026-06-29 22:27:39
1035
原创 4. Nginx 模块开发:深入理解 ngx_command_t 结构体与配置指令解析
type字段是的核心,它通过位运算组合了多个宏。作用域宏参数个数宏和取值类型宏。是 Nginx 模块开发的基石。理解其nametypesetconfoffset和post字段,以及type字段中作用域、参数个数和取值类型的宏定义,是编写高质量 Nginx 模块的关键。通过合理利用 Nginx 提供的内置slot函数(如等),我们可以高效地解析常见的配置模式,从而专注于模块的核心逻辑。希望本文的讲解和示例能帮助你快速上手 Nginx 模块开发。
2026-06-29 22:07:59
478
原创 3. 深入理解 Nginx 模块开发:ngx_http_module_t 结构体回调函数详解
首先,我们来看一下在 Nginx 源码中的定义(位于Main(主配置)和Server(虚拟主机配置)和Location(请求位置配置)和:在解析配置之前调用。:在解析配置之后调用。// 主配置(http 块)// 默认问候语// 虚拟主机配置(server 块)// 位置配置(location 块)结构体是 Nginx HTTP 模块开发的核心。:负责为各层级分配配置结构体内存。:初始化 Main 层级的默认值。
2026-06-28 16:18:33
441
7
原创 LM358经典电路设计全解析
LM358是一款低功耗双通道运算放大器,支持单/双电源供电,带宽1MHz,静态电流0.5mA。其基本应用电路包括:同相/反相放大器(增益由反馈电阻决定)、电压跟随器(阻抗匹配)、比较器(需注意输出摆幅限制)、差分放大器(需高精度电阻)以及积分器/低通滤波器(反馈回路使用电容)。PCB设计需注意输入电压范围限制、电源去耦(100nF+10μF电容)、敏感信号走线及输出摆幅验证。LM358输出高电平典型值为Vcc-1.5V,低电平接近GND,驱动重载时摆幅会进一步缩小。
2026-06-27 20:41:50
888
原创 2. Nginx 自定义模块开发教程:解析请求 Header 与 JSON Body
本教程介绍如何为Nginx开发一个自定义HTTP模块,实现请求处理、JSON解析和自定义响应功能。主要内容包括: 环境准备:需要Linux环境、Nginx 1.24.0源码和cJSON库 模块结构:通过配置结构体存储指令参数,采用指令驱动方式注册请求处理器 核心实现: 自定义指令解析器读取参数并注册处理函数 请求处理器解析JSON请求体和自定义头部 构造包含处理结果的JSON响应 添加自定义响应头 开发要点: 使用cJSON处理JSON数据 提供完整的config编译脚本 实现配置创建与合并函数 模块上下文
2026-06-27 18:31:19
385
原创 告别手动布线!用这款PCB自动布线器,F1C200s开发板走线快速到位
《PCB自动布线工具:硬件工程师的效率革命》 摘要:针对PCB手动布线耗时易错的问题,PCB Auto Router软件通过智能算法实现高效自动布线。以F1C200s开发板为例,该工具可自动完成BGA扇出、差分对布线、电源加宽等复杂操作,数分钟生成DRC零违规的布线方案。核心优势包括A*寻路算法、规则驱动设计、交互式微调及主流EDA兼容性,适用于嵌入式系统、多层板等场景。虽然高速数字/射频电路仍需人工干预,但该工具已将中等复杂度PCB的设计周期从数天缩短至小时级,支持Windows/macOS/Linux三
2026-06-26 23:26:41
245
2
原创 1. NGINX 最简http module
通过本文,你完成了一个可用的 nginx HTTP 模块,它可以直接返回 HTML 页面,无需任何后端应用。从外部文件或数据库读取内容并返回实现访问控制、请求改写、负载均衡算法将模块编译为动态模块以便灵活加载掌握 nginx 模块开发虽然需要理解底层 C API,但带来的高性能和定制化能力是其他方案难以比拟的。希望本文能成为你探索 nginx 内部世界的起点。
2026-06-26 23:02:50
245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅