深入理解Nginx 模块开发与架构解析(第2版)pdf

图书网 2022年1月3日21:46:59
评论
1.1K
摘要

书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了如何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;接着,综合Nginx框架代码分析了Nginx架构的设计理念和技巧,此外,还新增了如何在模块中支持HTTP变量,以及与slab共享内存等相关的内容,相信通过完善,可进一步帮助读者更好地开发出功能丰富、性能一流的Nginx模块。

深入理解Nginx 模块开发与架构解析(第2版) 作者:陶辉

深入理解Nginx 模块开发与架构解析(第2版) 出版社:机械工业出版社

深入理解Nginx 模块开发与架构解析(第2版) 内容简介

本书致力于说明开发Nginx模块的必备知识,第1版发行以后,深受广大读者的喜爱。然而由于Nginx功能繁多且性能强大,以致必须了解的基本技能也很庞杂,而第1版成书匆忙,缺失了几个进阶的技巧描述,因此第2版在此基础上进行了完善。书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了如何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;接着,综合Nginx框架代码分析了Nginx架构的设计理念和技巧,此外,还新增了如何在模块中支持HTTP变量,以及与slab共享内存等相关的内容,相信通过完善,可进一步帮助读者更好地开发出功能丰富、性能一流的Nginx模块。

本书包括四大部分:Nginx能帮我做什么;如何编写一个定制的httpmodule;深入Nginx;实战。第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线,告诉读者如何开发一个http模块,这部分读者不需要深入了解Nginx的细节,只需要知道如何实现一个基本的http模块。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构,深入探讨Nginx各种设计的目的与意义,并对第二部分使用到的一些特性进行代码设计实现上的探索。读者读完本部分,会对整个Nginx架构有清晰的认识,可以编写各种模块(不局限于http模块)插入到Nginx中,从而定制自己的Nginx。第四部分针对中高级读者,以Tengine的开源模块为例,帮助读者从实战角度理解第二、三部分描述的内容。

深入理解Nginx 模块开发与架构解析(第2版) 目录

前言

第一部分 Nginx能帮我们做什么

第1章 研究Nginx前的准备工作

1.1 Nginx是什么

1.2 为什么选择Nginx

1.3 准备工作

1.4 编译安装Nginx

1.5 configure详解

1.6 Nginx命令行控制

1.7 小结

第2章 Nginx的配置

2.1 运行中的Nginx进程间的关系

2.2 Nginx配置的通用语法

2.3 Nginx服务的基本配置

2.4 用HTTP核心模块配置一个静态Web服务器

2.5 用HTTP proxy module配置一个反向代理服务器

2.6 小结

第二部分 如何编写HTTP模块

第3章 开发一个简单的HTTP模块

3.1 如何调用HTTP模块

3.2 准备工作

3.3 如何将自己的HTTP模块编译进Nginx

3.4 HTTP模块的数据结构

3.5 定义自己的HTTP模块

3.6 处理用户请求

3.7 发送响应

3.8 将磁盘文件作为包体发送

3.9 用C++语言编写HTTP模块

3.10 小结

第4章 配置、error日志和请求上下文

4.1 http配置项的使用场景

4.2 怎样使用http配置

4.3 HTTP配置模型

4.4 error日志的用法

4.5 请求的上下文

4.6 小结

第5章 访问第三方服务

5.1 upstream的使用方式

5.2 回调方法的执行场景

5.3 使用upstream的示例

5.4 subrequest的使用方式

5.5 subrequest执行过程中的主要场景

5.6 subrequest使用的例子

5.7 小结

第6章 开发一个简单的HTTP过滤模块

6.1 过滤模块的意义

6.2 过滤模块的调用顺序

6.3 HTTP过滤模块的开发步骤

6.4 HTTP过滤模块的简单例子

6.5 小结

第7章 Nginx提供的高级数据结构

7.1 Nginx提供的高级数据结构概述

7.2 ngx_queue_t双向链表

7.3 ngx_array_t动态数组

7.4 ngx_list_t单向链表

7.5 ngx_rbtree_t红黑树

7.6 ngx_radix_tree_t基数树

7.7 支持通配符的散列表

7.8 小结

第三部分 深入Nginx

第8章 Nginx基础架构

8.1 Web服务器设计中的关键约束

8.2 Nginx的架构设计

8.3 Nginx框架中的核心结构体ngx_cycle_t

8.4 Nginx启动时框架的处理流程

8.5 worker进程是如何工作的

8.6 master进程是如何工作的

8.7 ngx_pool_t内存池

8.8 小结

第9章 事件模块

9.1 事件处理框架概述

9.2 Nginx事件的定义

9.3 Nginx连接的定义

9.4 ngx_events_module核心模块

9.5 ngx_event_core_module事件模块

9.6 epoll事件驱动模块

9.7 定时器事件

9.8 事件驱动框架的处理流程

9.9 文件的异步I/O

9.10 TCP协议与Nginx

9.11 小结

第10章 HTTP框架的初始化

10.1 HTTP框架概述

10.2 管理HTTP模块的配置项

10.3 监听端口的管理

10.4 server的快速检索

10.5 location的快速检索

10.6 HTTP请求的11个处理阶段

10.7 HTTP框架的初始化流程

10.8 小结

第11章 HTTP框架的执行流程

11.1 HTTP框架执行流程概述

11.2 新连接建立时的行为

11.3 第一次可读事件的处理

11.4 接收HTTP请求行

11.5 接收HTTP头部

11.6 处理HTTP请求

11.7 subrequest与post请求

11.8 处理HTTP包体

11.9 发送HTTP响应

11.10 结束HTTP请求

11.11 小结

第12章 upstream机制的设计与实现

12.1 upstream机制概述

12.2 启动upstream

12.3 与上游服务器建立连接

12.4 发送请求到上游服务器

12.5 接收上游服务器的响应头部

12.6 不转发响应时的处理流程

12.7 以下游网速优先来转发响应

12.8 以上游网速优先来转发响应

12.9 结束upstream请求

12.10 小结

第13章 邮件代理模块

13.1 邮件代理服务器的功能

13.2 邮件模块的处理框架

13.3 初始化请求

13.4 接收并解析客户端请求

13.5 邮件认证

13.6 与上游邮件服务器间的认证交互

13.7 透传上游邮件服务器与客户端间的流

13.8 小结

第14章 进程间的通信机制

14.1 概述

14.2 共享内存

14.3 原子操作

14.4 Nginx频道

14.5 信号

14.6 信号量

14.7 文件锁

14.8 互斥锁

14.9 小结

第15章 变量

15.1 使用内部变量开发模块

15.2 内部变量工作原理

15.3 定义内部变量

15.4 外部变量与脚本引擎

15.5 小结

第16章 slab共享内存

16.1 操作slab共享内存的方法

16.2 使用slab共享内存池的例子

16.3 slab内存管理的实现原理

16.4 小结

深入理解Nginx 模块开发与架构解析(第2版) 精彩文摘

2012年,Nginx荣获年度云计算开发奖(2012 Cloud Award for Developer of the Year),并成长为世界第二大Web服务器。全世界流量高的前1000名网站中,超过25%都使用Nginx来处理海量的互联网请求。Nginx已经成为业界高性能Web服务器的代名词。

那么,什么是Nginx?它有哪些特点?我们选择Nginx的理由是什么?如何编译安装Nginx?这种安装方式背后隐藏的又是什么样的思想呢?本章将会回答上述问题。

人们在了解新事物时,往往习惯通过类比来帮助自己理解事物的概貌。那么,我们在学习Nginx时也采用同样的方式,先来看看Nginx的竞争对手——Apache、Lighttpd、Tomcat、Jetty、IIS,它们都是Web服务器,或者叫做WWW(World Wide Web)服务器,相应地也都具备Web服务器的基本功能:基于REST架构风格,以统一资源描述符(Uniform Resource Identifier,URI)或者统一资源定位符(Uniform Resource Locator,URL)作为沟通依据,通过HTTP为浏览器等客户端程序提供各种网络服务。然而,由于这些Web服务器在设计阶段就受到许多局限,例如当时的互联网用户规模、网络带宽、产品特点等局限,并且各自的定位与发展方向都不尽相同,使得每一款Web服务器的特点与应用场合都很鲜明。

Tomcat和Jetty面向Java语言,先天就是重量级的Web服务器,它的性能与Nginx没有可比性,这里略过。

IIS只能在Windows操作系统上运行。Windows作为服务器在稳定性与其他一些性能上都不如类UNIX操作系统,因此,在需要高性能Web服务器的场合下,IIS可能会被“冷落”。

Apache的发展时期很长,而且是目前毫无争议的世界第一大Web服务器,图1-1中是12年来(2010~2012年)世界Web服务器的使用排名情况。

从图1-1中可以看出,Apache目前处于领先地位。

Apache有许多优点,如稳定、开源、跨平台等,但它出现的时间太长了,在它兴起的年代,互联网的产业规模远远比不上今天,所以它被设计成了一个重量级的、不支持高并发的Web服务器。在Apache服务器上,如果有数以万计的并发HTTP请求同时访问,就会导致服务器上消耗大量内存,操作系统内核对成百上千的Apache进程做进程间切换也会消耗大量CPU资源,并导致HTTP请求的平均响应速度降低,这些都决定了Apache不可能成为高性能Web服务器,这也促使了Lighttpd和Nginx的出现。观察图1-1中Nginx成长的曲线,体会一下Nginx抢占市场时的“咄咄逼人”吧。

Lighttpd和Nginx一样,都是轻量级、高性能的Web服务器,欧美的业界开发者比较钟爱Lighttpd,而国内的公司更青睐Nginx,Lighttpd使用得比较少。

在了解了Nginx的竞争对手之后,相信大家对Nginx也有了直观感受,下面让我们来正式地认识一下Nginx吧。

提示 Nginx发音:engine。

来自俄罗斯的Igor Sysoev在为Rambler Media(//www.rambler.ru/)工作期间,使用C语言开发了Nginx。Nginx作为Web服务器,一直为俄罗斯著名的门户网站Rambler Media提供着出色、稳定的服务。

Igor Sysoev将Nginx的代码开源,并且赋予其自由的2-clause BSD-like license许可证。由于Nginx使用基于事件驱动的架构能够并发处理百万级别的TCP连接,高度模块化的设计和自由的许可证使得扩展Nginx功能的第三方模块层出不穷,而且优秀的设计带来了极佳的稳定性,因此其作为Web服务器被广泛应用到大流量的网站上,包括腾讯、新浪、网易、淘宝等访问量巨大的网站。

2012年2月和3月Netcraft对Web服务器的调查如表1-1所示,可以看出,Nginx的市场份额越来越大。

图书网:深入理解Nginx 模块开发与架构解析(第2版)pdf

继续阅读

→→→→→→→→→→→→→→→→→→→→查找获取

心理健康

欲望的博弈:如何用正念摆脱上瘾pdf

欲望的博弈 作者:贾德森·布鲁尔(Judson Brewer) 美国 欲望的博弈 出版社:机械工业出版社 欲望的博弈 内容简介: 让你上瘾的不止有香烟和手机,还有思考和爱情。自我控制领域的思想领袖、马...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: