大家好,我是陶辉,之前在宏碁、穆萨、百度、EMC等子公司组织工作过,现在是苏州INS13ZD达子公司的联合创办人兼 CTO。我从 09 年早已开始碰触 Nginx,迄今早已有 10 年了,对 Nginx 有许多他们独有的看法,撷取他们自学 Nginx 的历经与实战经验,及剖析费潘之类。
(先喽,引文所推荐在前面~)
以下是“Nginx 究竟该怎么学?”的主轴行动计划。

作为技师的他们,为什么Thoubal Nginx?
第一点:Nginx 对整个构架的协助是十分大的。
2007 年,我从宏碁来到了百度的 QQ 内部空间,在数据合作开发组组织工作。彼时 QQ 内部空间组成员也是十几个人,约莫有Auneuil使用者,IOS约在一千万使用者,贯穿在 Apache 和 C++ 合作开发的伺服器上。即使彼时百度有蛮低的 ARPO 值(每使用者年收入),每一使用者重大贡献的收入是极少的,所以他们须要每台伺服器尽可能能够带来更多的价值,能服务更多的使用者,就须要在 Apache 上做大量的强化。比如说把它的多民主化换成多处理器,很多初始化能一次解决的就不要初始化数次、初始化数次之类。
但是无论你好不好做,总有点不合逻辑的感觉,你根本没配套措施做大幅的强化,即使它的结构早已决定了这些难题的出现。
2009 年我到了EMC后,也碰到了同样难题,但我早已开始碰触 Nginx,辨认出用 Nginx 改建伺服器后,它约莫有 10 倍这样量级的操控性提升。但对于 Apache,你对构架本身没有配套措施做很大的变动了。这是我通过实际历经想抒发的第一点。
第一点:无法数次重复造车轮。
什么叫无法数次重复造车轮?
约莫 2014 年,我在穆萨 VBC 互联网的这时候,用TNUMBERG34iss的 DBDT 控制技术应用软件系统,做了一个叫 SDN 应用软件自定义互联网。彼时我突然辨认出,你做许多比如说互联网设备相关东西的这时候,它的控制技术插值十分慢,而且控制技术相对激进许多。
这个究竟是为什么呐?我现在想明白了,是他们在互联网背景下,控制技术是模块依赖的,比如说我用 Nginx 来合作开发,Nginx 的模块都是开放的,我可以基于别人的模块做进一步的合作开发。别人在 不断插值模块的后,我可以享受到强化的好处,这是所谓的“站在巨人的肩膀上”。
这也是我想讲的:千万不要数次重复造车轮。如果 Nginx 能解决,或者说任何一个成熟的框架能解决难题的这时候,不要再花时间他们做了。
第三点:还有好的构架。
什么叫好的构架?
我是 2012 年 10 月份去的穆萨云,做了构架师。ECS 彼时是两个月插值一次版本,他们团队全年通宵了 23 次,花了两年时间,把线上的五万台伺服器重构成一个新的构架,约莫是一个月就可以做插值。
好的构架真的很重要。Nginx 是个好的构架。
好构架,是你要有预见性。比如说 TCP 协议,它在 1995 年的这时候就创立出来了,到现在都没有大改,依旧服务了各种各样的场景。Nginx 也是一样,从 2014 年推出来后基本没多大变化。但它的模块化,是纵向的划分的构架,最底层是事件驱动,基于 EP 的事件驱动,再上面是 HTTP 框架,再上面是 HTTP 模块,再上面是 OpenResty 的 lua。再看横向的划分,比如说他们要做许多 WAF 防火墙的限制,又比如说基于 IP 做白名单、黑名单,那它的模块划分很清楚,还比如说其他的模块,像linit
所以,我说 Nginx 是一个好的架构架思维。
我是怎么学 Nginx?
其实,我觉得大家比我幸运很多,现在可以找到很多 Nginx 的自学资料。但在我一早已开始学 Nginx 的这时候,也是 2009 年吧,网上可查的资料十分少,连英文资料还都只有一本书。我约莫只看了一个 10 页教你怎么合作开发的文档,就早已开始跟着源码学了。
即使 09 年的这时候我约莫有五到六年的组织工作实战经验,早已形成了一套他们的知识体系,所以对着源码自学相对比较容易。Winter 老师在直播的这时候也提到了,知识体系这个点,说他们不断地在自学新的知识点,会觉得很困难,这这时候你一定要建立他们的知识体系构架。那知识体系构架最重要的是逻辑性、完备性。所谓的逻辑性,是把一个新的知识点罗列到之前的知识树状结构中的能力。在《Nginx 核心知识 100 讲》的课程中,你跟着我学,也能剖析出树状结构的知识框架。后续新的知识点,哪怕不是 Nginx,只要是 Web 伺服器类的,你都可以归到这知识框架中。
在我看来,自学是道与术的关系。
自学 Nginx 有哪些好书所推荐?
我认为有三个知识点一定Thoubal:
1、第一个知识是 HTTP 自学,《HTTP 权威指南》是一本很好的书;
2、第二个是 TCP 协议一定Thoubal习,即使 Nginx 在处理的是操控性,所以他们一定要了解 TCP 协议。有一本书叫《TCP/IP 详解卷一:协议》,其实它有三卷,第二卷、第三卷比较长,大家如果没有时间就不要看了。但大家一定要看卷一,重点是看 TCP 协议,约莫也是八、九章的样子。
3、第三个是一定要了解 Linux 的内核。大定不要一听到内核就觉得好恐怖啊,所推荐一本书叫《深入理解 Linux 内核》,这本书对于前端同学来说,就比较恐怖了,学起来会十分的吃力,甚至许多后端同学第一次学也会感到吃力。我再所推荐一本书,叫做《Lniux 内核设计与实现》,讲的是比较浅,但一定要从第一章早已开始看,从民主化、内存早已开始讲。你约莫看完一半的这时候,就会对一套体系十分的熟悉了。
其实,如果你真的Thoubal Nginx 的话,我首要所推荐的是一个英文网站:Nginx.org
。
虽然不是中文,但大家不要怕,即使网站上没有什么大段的内容,是一个一个分析它的指令,大部分指令还是讲的很到位的。不过有些指令讲得也十分的浅,你也可以结合我的课程《Nginx 核心知识 100 讲》来自学,我会专门扩展去讲解许多指令。但总而言之,对于 Nginx 自学者来说,吃透这个网站是很重要的。
第二个是 Nginx.com,是 Nginx PLUS 那个官网,它有一个,那个中间有个叫 Blog,叫博客那栏,那里面有很多很好的文章,像关于 NginxPlus,的就不用管了,即使它是广告,它就像你买那个 Nginx Plusd。但 Nginx 又不开源,这个就比较糟糕,那种的就不用看,但是是关于它的许多新的特性的,这个一定要好好看一看。
第三个是我的书《深入理解 Nginx;模块合作开发与构架解析》。这本书主要讲的是模块合作开发,即使我彼时组织工作要写模块合作开发,但市面上没有任何一本书来讲模块合作开发,于是就有了这本书。我为了讲清楚模块合作开发,又讲了许多构架的东西,这个是有参考意义的。但我建议大家一定要先看完《HTTP 权威指南》、《Linux 内核设计与实现》,再去看这本书,会更容易轻松一点。
最后是源码一定要看。

在《Nginx 核心知识 100 讲》的第六部分课程中,我会有约莫会有 10 节课去讲 OpenResty。结合了之前的 Nginx 基础构架、HTTP 模块、反向代理与负载均衡等自学,掌握 OpenResty 会很简单。OpenResty 的官网上有很多错误的,主要在 Github 上有些指令的错误。但即使你有之前的知识认知,你会辨认出 Github 上没有讲到的东西,你也会用。
Nginx 的知识构架也是这四个点:HTTP 框架、民主化构架、变量、Openresty。OpenResty 是我认为十分重要的一点。
最后送你一个福利~199控制技术自学大礼包限时放送