nginx高效学习方法

nginx做为一个高性能的web服务器,相对于apache等服务器来说它的代码量并不是非常庞大,反而非常精简。看过nginx源码的人都知道,nginx将“一切皆为模块”和“所有问题都可以通过加层的方式来解决”这两句话体现得淋漓尽致。nginx所有功能都由一个一个模块叠加而成,这对快速定位问题非常有用。在计算机行业中有这么一句话,计算机中的所有问题都可以通过增加中间层的方式来解决;比如linux物理内存太少不够用,就通过增加虚拟内存这一层来解决;再比如内存访问磁盘的速度太低,就通过增加调整缓存这一层来解决等等。nginx也是一样通过增加中间层来解决问题,nginx的大体上分为三层,第一层由核心模块、事件模块,日志模块组成,主要处理配置解析、TCP网络事件等;第二层由http框架模块、mail框架模块等组成,在第一层的基础上处理用户的请求,解析用户请求行、请求头(http协议);第三层由业务模块组成,通过获取第二层解析的用户请求信息进行业务处理。

nginx是一个非常优秀的开源软件,学习它可以提高我们编码的能力。相信每个人都能学会nginx,只是时间问题而已,但如何发最少的时间高效的学会nginx呢?本人学习nginx已有大半个月,虽没有完全看完nginx源代码,但也看懂近十个模块的源代码。以下是本人学习nginx的一些方法。

第一步、下载nginx源代码,在linux上编译安装
    能看懂configure文件的尽量学习一下,看不懂的就算了,编译完后是知道在objs目录下有一个ngx_modules.c文件,这文件里存有nginx模块加载运行的顺序。

第二步、用sourceInsight建立一个nginx源码工程
    第三、四步中会用到

第三步、找一本nginx方面的电子书,按照书的流程看一遍
    入门级书中一般都会介绍一些nginx常用的配置项、nginx常用的数据结构、以及如何编写nginx模块等等,这些都得学会。看书是有技巧的,在看书时遇到书中对某结构体或者某函数的描述时就将描述信息写在源代码中对相应的结构体或函数边,后续看代码时就不需要再这里找那里找了。

第四步、阅读源代码
    书看完了,并不代表就学会了,有些细节还得通过看源代码才能知道。阅读源代码不能无目的的去看,得按照ngx_modules.c文件中模块的编译 顺序一个模块一个模块的去看,模块之间总会有些依赖关系的,前一个模块所做的工作往往后面的模块要用到,不按模块顺序看是要付出很大代价的。由于在第三步中对一些重要的结构成员已经有描述了,此时看起代码来就不那么困难了。源代码至少得看两遍,第一遍将每个模块的源码看一遍,知道该模块处理了那些配置项,完成了什么功能;第二遍得从连接的角度去看,如当nginx收到用户请求时经过那些模块,这些模块对它做了那些处理等。

一些比较有用的资料
    http://nginx.org/en/docs/                        //官方文档,关于nginx的任何资料都能在这里找到,重要的是这些列出了每个模块处理的配置项
    http://www.pagefault.info/?p=188       //nginx的启动过程分析,这篇文章确实不错

以上只代表我个人的学习办法,对某些牛人来说也许并不适合。
    漫漫江湖路,高手寂寞心。要想成为高手,是必需得要有所付出的。

nginx高效学习方法的更多相关文章

  1. 新手学习Web前端的三个高效学习方法,基础要重视

    作为新手,出于对风险的担心,不免在学习一项新技能或者转投一个新行业的时候,有所犹豫与徘徊.毕竟,在这场类似冒险的选择中,我们需要投入时间.精力以及承受相关的经济损失.但是,只有勇敢迈出第一步,才能为生 ...

  2. Nginx高效核心

    Nginx高效核心 目录 Nginx高效核心 Introduction I/O特性 同步/异步 阻塞/非阻塞 常见的I/O模型 阻塞型 非阻塞型 多路复用模型(多路阻塞) 信号驱动模型 异步模型 Ng ...

  3. 自学python的高效学习方法【python秘籍】

    随着互联网的发展,数据科学概念的普及,Python火得一塌糊涂,为此很多小伙伴想学这门语言,苦于没有正确的学习方法,大部分都放弃了,所以我想总结下经验来帮助大家高效学完python技术!第一.首先学习 ...

  4. 关于C语言编程的高效学习方法,首要任务是掌握高效编程,其次乃代码优化!

    在本篇文章中,我收集了很多经验和方法.应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码. 简介 在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级 ...

  5. nginx upstream模块

    upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler.filter和upstream.前面的章节中,读者已经了解了handler.filter. 利 ...

  6. 【高性能服务器】Nginx剖析

    引言 Nginx是一个流行的高性能服务器,官方宣称在压力测试下可以支持5万个并发连接,而且占用内存极低.相比于其他昂贵的硬件负载均衡解决方案,Nginx是开源免费的,可以大大降低成本.本文将从一下几个 ...

  7. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  8. 一张脑图说清 Nginx 的主流程

    一张脑图说清 Nginx 的主流程 这个脑图在 nginx-1.14.0-research 上.这是我在研究nginx的http模块的时候画的.基本上把 Nginx 主流程(特别是 HTTP 的部分) ...

  9. Nginx软件优化【转】

    转自 Nginx软件优化 - 惨绿少年 - 博客园 Nginx软件优化 - 惨绿少年 - 博客园 https://www.cnblogs.com/clsn/p/8484559.html 1.1 Ngi ...

随机推荐

  1. USBDM Debugger interface for Freescale RS08,HCS08,HCS12,Coldfire and ARM-Kinetis Devices.

    Introduction USBDM is a debugger hardware interface for a range of Freescale microcontrollers. It is ...

  2. 调试工具BTrace 的使用--例子

    http://www.cnblogs.com/serendipity/archive/2012/05/14/2499840.html

  3. 基于设备树的TQ2440的中断(1)

    作者 姓名:彭东林 E-mail:pengdonglin137@163.com QQ:405728433 平台 板子:TQ2440 内核:Linux-4.9 u-boot: 2015.04 工具链: ...

  4. android:activity活动的生命周期

    掌握活动的生命周期对任何 Android 开发者来说都非常重要,当你深入理解活动的生命 周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的 游刃有余.你的应用程序将会拥有 ...

  5. PostgreSQL学习手册(目录)

    原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html 事实上之前有很长一段时间都在纠结是否有必要好好学习它 ...

  6. iOS用全局宏的概念理解xcode中的设置 preprocessor macros

    ios有没有全局宏,或者在工程属性里设置宏? 比如我设置了一个宏叫IOS, 在所有/整个工程的代码里这个宏都是有效的. ------解决方案-------------------- 在工程的设置属性里 ...

  7. EntityFramework:状态变化与方法的关系(朋友的学习笔记)

    一.约定OnModelCreating 有一些限制需要注意,例如: 1.表名不支持使用标签进行标注 2.最小长度在 OnModelCreating 中不支持 3.正则表达式在 OnModelCreat ...

  8. python测试开发django-37.外键(ForeignKey)查询

    前言 前面在admin后台页面通过设置外键,可以选择下拉框的选项,本篇主要讲解关于外键(ForeignKey)的查询 models设计 在上一篇的基础上新增一个BankName表,Card表通过外键关 ...

  9. mongodb如何设置主键自增

    function getNextSequence(name){ var ret = db.counters.findAndModify({ query: { _id: name}, update:{ ...

  10. Eclipse断点调试(DBG)Android应用

    1.添加断点 双击左侧边框便可添加断点,右击也能添加断点. 2.进入调试模式 点击虫子,然后选择工程运行,快捷键为单击F11 ,如果是正常运行就是Ctrl+F11 3.单步调试+跳到下一个断点 运行到 ...