我很希望将本书写成一本 “step by step” 式(循序渐进式)的书籍,因为这样最能节省读者的时间,然而,由于 3 个主要写作目的想解决的问题都不是那么简单,所以这本书只能做一个折中的处理。
在第一部分的前两章中,将只探讨如何使用 Nginx 这一个问题。阅读这一部分的读者不需要了解 C 语言,就可以学习如何部署 Nginx,学习如何向其中添加各种官方、第三方的功能模块,如何通过修改配置文件来更改 Nginx 及各模块的功能,如何修改 Linux 操作系统上的参数来优化服务器性能,最终向用户提供企业级的 Web 服务器。这一部分介绍配置项的方式,更偏重于领着对 Nginx 还比较陌生的读者熟悉它,通过了解几个基本 Nginx 模块的配置修改方式,进而使读者可以通过查询官网、第三方网站来了解如何使用所有 Nginx 模块的用法。
在第二部分的第 3 章~第 7 章中,都是以例子来介绍 HTTP 模块的开发方式的,这里有些接近于 “step by step” 的学习方式,我在写作这一部分时,会通过循序渐进的方式使读者能够快速上手,同时会穿插着介绍其常见用法的基本原理。
在第三部分,将开始介绍 Nginx 的完整框架,阅读到这里将会了解第二部分中 HTTP 模块为何以此种方式开发,同时将可以轻易地开发 Nginx 模块。这一部分并不仅仅满足于阐述 Nginx 架构,而是会探讨其为何如此设计,只有这样才能抛开 HTTP 框架、邮件代理框架,实现一种新的业务框架、一种新的模块类型。
对于 Nginx 的使用还不熟悉的读者应当从第 1 章开始学习,前两章将帮助你快速了解 Nginx。
使用过 Nginx,但对如何开发 Nginx 的 HTTP 模块不太了解的读者可以直接从第 3 章开始学习,在这一章阅读完后,即可编写一个功能大致完整的 HTTP 模块。然而,编写企业级的模块必须阅读完第 4 章才能做到,这一章将会介绍编写产品线上服务器程序时必备的 3 个手段。第 5 章举例说明了两种编写复杂 HTTP 模块的方式,在第三部分会对这两个方式有进一步的说明。第 6 章介绍一种特殊的 HTTP 模块 ——HTTP 过滤模块的编写方法。第 7 章探讨基础容器的用法,这同样是复杂模块的必备工具。
如果读者对于普通 HTTP 模块的编写已经很熟悉,想深入地实现更为复杂的 HTTP 模块,或者想了解邮件代理服务器的设计与实现,或者希望编写一种新的处理其他协议的模块,或者仅仅想了解 Nginx 的架构设计,都可以直接从第 8 章开始学习,这一章会从整体上系统介绍 Nginx 的模块式设计。第 9 章的事件框架是 Nginx 处理 TCP 的基础,这一章无法跳过。阅读第 8 章、第 9 章时可能会遇到许多第 7 章介绍过的容器,这时可以回到第 7 章查询其用法和意义。第 10 章~第 12 章在介绍 HTTP 框架,通过这 3 章的学习会对 HTTP 模块的开发有深入的了解,同时可以学习 HTTP 框架的优秀设计。第 13 章简单介绍了邮件代理服务器的设计,它近似于简化版的 HTTP 框架。第 14 章介绍了进程间同步的工具。第 15 章介绍了 HTTP 变量,包括如何使用已有变量、支持用户在 nginx.conf 中修改变量的值、支持其他模块开发者使用自己定义的变量等。第 16 章介绍了 slab 共享内存,该内存极为高效,可用于多个 worker 进程间的通信。
为了不让读者陷入代码的 “汪洋大海” 中,在本书中大量使用了图表,这样可以使读者快速、大体地了解流程和原理,在这基础上,如果读者还希望了解代码是如何实现的,可以针对性地阅读源代码中的相应方法。在代码的关键地方会通过添加注释的方式加以说明。希望这种方式能够帮助读者减少阅读花费的时间,更快、更好地把握住 Nginx,同时深入到细节中
写作本书第 1 版时,Nginx 的最新稳定版本是 1.0.14,所以当时是基于此版本来写作的。截止到第 2 版完成时,Nginx 的稳定版本已经上升到了 1.8.0。但这不会对本书的阅读造成困惑,笔者验证过示例代码,均可以运行在最新版本的 Nginx 中,这是因为本书主要是在介绍 Nginx 的基本框架代码,以及怎样使用这些框架代码开发新的 Nginx 模块。在这些基本框架代码中,Nginx 一般不会做任何改变,否则已有的大量 Nginx 模块将无法工作,这种损失是不可承受的。而且 Nginx 框架为具体的功能模块提供了足够的灵活性,修改功能时很少需要修改框架代码。
Nginx 是跨平台的服务器,然而这本书将只针对于最常见的 Linux 操作系统进行分析,这样做一方面是篇幅所限,另一方面则是本书的写作目的主要在于告诉大家如何基于 Nginx 编写代码,而不是怎样在一个具体的操作系统上修改配置使用 Nginx。因此,即使本书以 Linux 系统为代表讲述 Nginx,也不会影响使用其他操作系统的读者阅读,操作系统的差别相对于本书内容的影响实在是非常小。
陶辉
毕业于西安交通大学计算机科学与技术专业,曾就职于华为中央软件部、腾讯 QQ 空间、思科中国 CRDC 等公司,目前在阿里巴巴云计算公司的飞天团队工作,研究方向为介于 Iaas 和 Paas 间的弹性计算,多年以来专注于 Nginx 的定制化应用,对 Nginx 的设计与特性有深刻认识,实战经验丰富,编写过许多优秀的 Nginx 模块并应用于企业级产品中,同时撰写了大量关于 Nginx 的技术文章。擅长 Linux 下高性能服务器的开发,以及分布式环境下海量数据存储的设计开发。
- EPUB 原版带目录:和彩云,提取码:vbyZ