`
melec
  • 浏览: 27751 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

转.nginx 源代码分析

阅读更多
nginx 源代码分析
2009-09-11 13:44
本文主要简单介绍nginx源码目录结构、程序编译流程、如何构建学习nginx的环境等。
本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该版本的src目录下共有96615行代码,共记234个源码文件。

注:本系统的文章为本人学习做笔记用,为源码分析,而非模块的编写,可能会存在问题。

1.1 源码目录简述
nginx的源码目录结构层次明确,从自动编译脚本到各级的源码,层次都很清晰,是一个大型服务端软件构建的一个范例。以下是源码目录结构说明:

├─auto         自动编译安装相关目录
│  ├─cc       针对各种编译器进行相应的编译配置目录,包括Gcc、Ccc等
│  ├─lib      程序依赖的各种库,包括md5,openssl,pcre等
│  ├─os       针对不同操作系统所做的编译配置目录
│  └─types                 
├─conf         相关配置文件等目录,包括nginx的配置文件、fcgi相关的配置等
├─contrib
├─html         index.html
└─src         源码目录
    ├─core    核心源码目录,包括定义常用数据结构、体系结构实现等
    ├─event   封装的事件系统源码目录
    ├─http    http服务器实现目录
    ├─mail    邮件代码服务器实现目录
    ├─misc    该目录当前版本只包含google perftools包
    └─os      nginx对各操作系统下的函数进行封装以及实现核心调用的目录。
1.2 程序编译流程
nginx有许多值得学习的地方,它的编译脚本也不例外。nginx的编译脚本非由autoconf等相关工具生成,都是由作者手工编写的。
列举几个与后续开发相关的目录并做说明:
src/auto/modules 根据configure和编译环境的条件生成相应的模块信息。见:ngx_modules.c
src/auto/sources 定义了不同的模块的生成规则,包括相关的源文件、依赖等,最终编译过程中会生成相应的库文件。
nginx在编译安装的过程中会生成objs目录,其中包括编译过程中生成的库文件,以及相关的配置文件,进入目录会存在以下文件:

ngx_auto_config.h 生成的与程序运行相关的宏
ngx_modules.c 由编译生成的模块相关的定义
src 该目录下有许多生成的库文件,作为最终生成nginx使用

1.3 构建nginx学习环境
分析nginx源码的目的是学习nginx高效的处理能力的体系结构,并能将其思想,甚至于nginx的框架借用于服务端的开发。从可扩展的模块机制、内存管理、事件系统等各个方面都有许多值得学习的地方。
但nginx的源代码的核心包间的关联度较高,其它核心的几个数据结构,包括ngx_connection\ngx_array\ngx_buf\ngx_command等等几乎存在于代码每一个角落,我在第一次看0.1.0的时候(0.1.0是网上能找到的nginx的最早版本),发现很难将它们独立出来去对这些数据结构进行测试和学习,于是总结出自己学习的一些方法如下:

学习和熟悉核心数据结构的方法:
1、先熟悉常用的数据结构的使用,包括以下:
ngx_pool\ngx_connection\ngx_array\ngx_buf\
ngx_command\ngx_log\ngx_event\ngx_cycle\ngx_str等
对于这些数据结构的使用方法的原理基本熟悉,学习的方法就是看他们的实现以及http和mail中的使用,熟能生巧。
2、删除nginx.c中main函数的主体,在1的基础上学习其它内容,这样就不需要过多关注nginx的复杂的编译脚本就能学习到相应的知识。

附带基于nginx-0.1.0框架实现的简单echo服务端,程序读取用户输入内容,然后将该内容输出,定时断开连接。

终端:

-bash-3.2# !te
telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ops init connection
test
test
connection timedout
Connection closed by foreign host.
目录结构:

├─core
├─event
│  └─modules
├─ops
│  ├─ngx_ops.c
│  └─ngx_ops.h
└─os
    └─unix
如果需要该部分代码的朋友可以留下Email地址。
下一节准备对nginx的启动流程做分析。

原文:http://hi.baidu.com/beibeiboo/blog/item/287b3608438c1c9f0b7b826b.html
分享到:
评论

相关推荐

    nginx源码剖析

    nginx源码说明;其他下载即可,没下载分了,大家互相帮忙。其他情况大概就这些吧,其他也没什么好说的了,看文档即可

    Nginx源代码分析.pdf

    Nginx源代码分析.pdf

    nginx 源码 解析 资料大全

    收集的 nginx 源码 解析 ,非常全 architecture.png Emiller的Nginx模块开发指南.docx Nginx(en).pdf nginx@taobao.pdf nginx_internals.pdf ...nginx源码分析.doc nginx源码剖析.pdf Ningx代码研究.docx

    Nginx源代码分析

    本文为Nginx源代码分析指导丛书,为学习使用Nginx源码开发人员提供方便

    nginx源码分析文档

    nginx源码分析nginx源码分析nginx源码分析nginx源码分析nginx源码分析nginx源码分析nginx源码分析nginx源码分析nginx源码分析nginx源码分析

    Nginx源码分析

    Nginx源码分析 1. Nginx代码的目录和结构 2. 基本数据结构 3. nginx的core module 的结构和运行机制 4. nginx的http module 的结构和运行机制

    Nginx 源码分析笔记

    Nginx 源码分析笔记 自己的源码分析笔记,未完。

    nginx源码分析

    nginx源码分析,整合网络资源精彩呈现,分析的很详细,并附有源码解释,作者:http://blog.csdn.net/kenbinzhang

    nginx源码分析--带注释

    nginx源码分析,分析过程中将重要的部分进行了注释,以便理解

    nginx源码分析全景图.png

    nginx源码分析全景图

    JAVA版SpringBoot生产制造执行MES系统源码mysql8.echarts.jenkins.docker.nginx

    SpringBoot生产制造执行MES系统源码 MES源码 主数据管理:动态配置表以及所需要显示的字段,只需要简单维护既可以完成增删改成操作。 质量管理: 质检项维护,根据物料或者型号管理质检项目。检验页面,抽检确认 ...

    nginx源代码

    nginx源代码 供大家参考分析谢谢 这个是从官网最新下载的

    Nginx源代码分析与导读

    关于nginx源码的简单分析。对高性能服务器的学习有很大的帮助

    Nginx源码剖析

    本书详细介绍了Nginx的进程模型,内存管理,request请求的解析,handler的处理等

    nginx源码分析-高性能服务器编写

    现在国内Nginx的用户越来越多了,多数拥抱Nginx的网站都钟意其优异的性能表现,如果是相对比较大的网站,节约下来的服务器成本无疑是客观的。当前Ngnix 美中不足之处是相关的文档和用户经验都还是很欠缺,用户之间还...

    Nginx 代码研究

    我们发现目前学习nginx的例子很少,主要是emiller的模块开发介绍这篇文章, 但是单独研究这篇文章发现很多晦涩难懂的地方,而目前还没有其他更好的文章来对这些地方做解释, 有些东西必须要通过源代码的研读才可以...

Global site tag (gtag.js) - Google Analytics