Nginx 初探

我一直认为程序员的修炼离不开源码的阅读,尤其是受大家欢迎的开源项目,代码简洁高效、模块化、高扩展性都是我们加以研读的理由。Nginx,因其可靠性高、低内存消耗、高并发而受到各大企业的追捧...它作为优秀的开源项目,显然具备以上几点,本人又正好从事相关领域的职业,实在抵不住它源码的诱惑,打算狠下心来读它将近十万行的代码,但现实是骨感的…一是时间、二是方法、三是毅力。重中之重是方法,这不需要多说,由于是第一次看开源项目,缺乏相关的经验,只能凭自己对程序的理解探索大致的阅读方向,走弯路是可能的,至于走多少,我实在不能肯定…

复杂的项目都是由简单的模块组成的,这或许可以成为我们阅读源码的指导。先努力拆解那个看似复杂实际也非常复杂的项目,在这一步可以先上网找找相关资料,能帮一点是一点,建立起对项目的大致印象再说,当将源码的模块拆分的足够小后,就可以集中精力各个击破。以上是我阅读时的大致方向,列在这里仅供参考。

万里长征,我今天迈出了第一步。以下是我搜寻的关于Nginx架构的资料

Nginx架构:

从结构上来说,Nginx分为核心模块、基础模块、第三方模块。从功能上,分为Handlers(处理器模块)、Filters(过滤器模块)、load-balancers(负载均衡模块)

结构:

核心模块有http、event、mail三大模块。内核通过查找配置文件将客户端请求映射到一个locationblock(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

基础模块包含Http

Proxy、Http

Access、Http

FastCgi、Http

Rewrite等等

第三方模块是前仆后继的程序员扩展的结果。

功能:

Handlers用于Http请求,然后产生输出。

Filters过滤handler产生的输出。

load-balancers当有多于一台的后端备选服务器是,选择一台转发Http请求。

源码结构:

我下载的源码是nginx-1.0.14,源码在SRC文件夹中,它又包含core、http、mail、event、os、misc几个目录。

core核心模块

httphttp协议处理模块的代码,作为web服务器运行时的核心模块

mailmail处理模块的代码,nginx作为pop3/imap/smtp代理服务器运行时的核心模块

eventnginx自身对事件处理逻辑的封装

osnginx对各个平台抽象逻辑的封装

miscnginx的一些utils,定义了test和profiler的一些外围模块的逻辑

nginx几个大的模块就这么几个,但小的功能模块可能数不清,理清它们是需要时间的…我会在之后持续更新,分享我探寻nginx的心得,这也是对我的一种鞭策把。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容