nginx高效学习方法
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高效学习方法的更多相关文章
- 新手学习Web前端的三个高效学习方法,基础要重视
作为新手,出于对风险的担心,不免在学习一项新技能或者转投一个新行业的时候,有所犹豫与徘徊.毕竟,在这场类似冒险的选择中,我们需要投入时间.精力以及承受相关的经济损失.但是,只有勇敢迈出第一步,才能为生 ...
- Nginx高效核心
Nginx高效核心 目录 Nginx高效核心 Introduction I/O特性 同步/异步 阻塞/非阻塞 常见的I/O模型 阻塞型 非阻塞型 多路复用模型(多路阻塞) 信号驱动模型 异步模型 Ng ...
- 自学python的高效学习方法【python秘籍】
随着互联网的发展,数据科学概念的普及,Python火得一塌糊涂,为此很多小伙伴想学这门语言,苦于没有正确的学习方法,大部分都放弃了,所以我想总结下经验来帮助大家高效学完python技术!第一.首先学习 ...
- 关于C语言编程的高效学习方法,首要任务是掌握高效编程,其次乃代码优化!
在本篇文章中,我收集了很多经验和方法.应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码. 简介 在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级 ...
- nginx upstream模块
upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler.filter和upstream.前面的章节中,读者已经了解了handler.filter. 利 ...
- 【高性能服务器】Nginx剖析
引言 Nginx是一个流行的高性能服务器,官方宣称在压力测试下可以支持5万个并发连接,而且占用内存极低.相比于其他昂贵的硬件负载均衡解决方案,Nginx是开源免费的,可以大大降低成本.本文将从一下几个 ...
- 基于nginx+lua+redis高性能api应用实践
基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...
- 一张脑图说清 Nginx 的主流程
一张脑图说清 Nginx 的主流程 这个脑图在 nginx-1.14.0-research 上.这是我在研究nginx的http模块的时候画的.基本上把 Nginx 主流程(特别是 HTTP 的部分) ...
- Nginx软件优化【转】
转自 Nginx软件优化 - 惨绿少年 - 博客园 Nginx软件优化 - 惨绿少年 - 博客园 https://www.cnblogs.com/clsn/p/8484559.html 1.1 Ngi ...
随机推荐
- [Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
关于管道 Channel Channel 用来同步并发执行的函数并提供它们某种传值交流的机制. Channel 的一些特性:通过 channel 传递的元素类型.容器(或缓冲区)和 传递的方向由“&l ...
- Using Dtrace OEL 6.X
http://www.hhutzler.de/blog/using-dtrace/ http://docs.oracle.com/cd/E37670_01/E38608/html/dt_sdtparg ...
- delphi DockPresident
作为Delphi的忠实用户,我想大家对Delphi中的停靠窗体应该比较熟悉吧,是不是也希望自己编的程序也具有这样的功能?使她看起来更漂亮,更专业,更方便. 本人做的一套停靠控件DockPresiden ...
- JavaScript进阶系列04,函数参数个数不确定情况下的解决方案
本篇主要体验函数参数个数不确定情况下的一个解决方案.先来看一段使用函数作为参数进行计算的实例. var calculate = function(x, y, fn) { return fn(x, y) ...
- ios之快速枚举
for(UIView * subView in self.view.subviews) { if([subView isKindOfClass:[XYZSeniorQueryView class]]) ...
- 打开IPHONE的sms.db短信文件 方法
先将导出的sms.db文件改名为sms.sqlite再下载个火狐浏览器<IGNORE_JS_OP style="WIDOWS: 2; TEXT-TRANSFORM: none; BAC ...
- Codeforces Round #131 Div1 B
Problem 给出Ai(i∈[0,9]).表示每一个数字至少须要出现多少次.问有多少个数满足下面三个条件:1. 数至多有N位:2. 数不含有前导0:3. 每一个数 i 出现的次数不少于Ai(mod ...
- 我们的生活第二季/全集This Is Us迅雷下载
NBC剧集<我们这一天>宣布一次性续订2.3季,这部Dan Fogelman打造的大热剧是这个秋季档收视人数第二的广播网剧情剧.新续订的两季还是每季18集. NBC的叫好叫座剧<我们 ...
- Android之一种很有趣的界面跳动提示动画
上一个效果图: ==================================== 先上布局: <RelativeLayout xmlns:android="http://sch ...
- CountDownLatch使用场景及分析
JDk1.5提供了一个非常有用的包,Concurrent包,这个包主要用来操作一些并发操作,提供一些并发类,可以方便在项目当中傻瓜式应用. JDK1.5以前,使用并发操作,都是通过Thread,Run ...