深入理解Nginx
深入理解Nginx封面图

深入理解Nginx

陶辉, 编著

出版社:机械工业出版社

年代:2013

定价:79.0

书籍简介:

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。本书包括三大部分内容。第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识,第二部分针对中级读者,以一个例子为主线,告诉读者如何开发一个HTTP模块,这部分不需要深入了解Nginx的细节,只需要知道如何实现一个基本的HTTP模块。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构,深入探讨Nginx各种设计的目的与意义,并对第二部分使用到的一些特性进行代码设计实现上的探索,读完本部分内容,会对整个Nginx架构有清晰的认识,可以编写各种模块(不局限于HTTP模块)插入到Nginx中,从而定制自己的Nginx。

书籍目录:

前 言第一部分 Nginx能帮我们做什么第1章 研究Nginx前的准备工作1.1 Nginx是什么1.2 为什么选择Nginx1.3 准备工作1.3.1 Linux操作系统1.3.2 使用Nginx的必备软件1.3.3 磁盘目录1.3.4 Linux内核参数的优化1.3.5 获取Nginx源码1.4 编译安装Nginx1.5 configure详解1.5.1 configure的命令参数1.5.2 configure执行流程1.5.3 configure生成的文件1.6 Nginx的命令行控制1.7 小结第2章 Nginx的配置2.1 运行中的Nginx进程间的关系2.2 Nginx配置的通用语法2.2.1 块配置项2.2.2 配置项的语法格式2.2.3 配置项的注释2.2.4 配置项的单位2.2.5 在配置中使用变量2.3 Nginx服务的基本配置2.3.1 用于调试进程和定位问题的配置项2.3.2 正常运行的配置项2.3.3 优化性能的配置项2.3.4 事件类配置项2.4 用HTTP核心模块配置一个静态Web服务器2.4.1 虚拟主机与请求的分发2.4.2 文件路径的定义2.4.3 内存及磁盘资源的分配2.4.4 网络连接的设置2.4.5 MIME类型的设置2.4.6 对客户端请求的限制2.4.7 文件操作的优化2.4.8 对客户端请求的特殊处理2.4.9 ngx_http_core_module模块提供的变量2.5 用HTTP proxy module配置一个反向代理服务器2.5.1 负载均衡的基本配置2.5.2 反向代理的基本配置2.6 小结第二部分 如何编写HTTP模块第3章 开发一个简单的HTTP模块3.1 如何调用HTTP模块3.2 准备工作3.2.1 整型的封装3.2.2 ngx_str_t数据结构3.2.3 ngx_list_t数据结构3.2.4 ngx_table_elt_t数据结构3.2.5 ngx_buf_t数据结构3.2.6 ngx_chain_t数据结构3.3 如何将自己的HTTP模块编译进Nginx3.3.1 config文件的写法3.3.2 利用configure脚本将定制的模块加入到Nginx中3.3.3 直接修改Makefile文件3.4 HTTP模块的数据结构3.5 定义自己的HTTP模块3.6 处理用户请求3.6.1 处理方法的返回值3.6.2 获取URI和参数3.6.3 获取HTTP头部3.6.4 获取HTTP包体3.7 发送响应3.7.1 发送HTTP头部3.7.2 将内存中的字符串作为包体发送3.7.3 经典的“Hello World”示例3.8 将磁盘文件作为包体发送3.8.1 如何发送磁盘中的文件3.8.2 清理文件句柄3.8.3 支持用户多线程下载和断点续传3.9 用C 语言编写HTTP模块3.9.1 编译方式的修改3.9.2 程序中的符号转换3.10 小结第4章 配置、error日志和请求上下文4.1 http配置项的使用场景4.2 怎样使用http配置4.2.1 分配用于保存配置参数的数据结构4.2.2 设定配置项的解析方式4.2.3 使用14种预设方法解析配置项4.2.4 自定义配置项处理方法4.2.5 合并配置项4.3 HTTP配置模型4.3.1 解析HTTP配置的流程4.3.2 HTTP配置模型的内存布局4.3.3 如何合并配置项4.3.4 预设配置项处理方法的工作原理4.4 error日志的用法4.5 请求的上下文4.5.1 上下文与全异步Web服务器的关系4.5.2 如何使用HTTP上下文4.5.3 HTTP框架如何维护上下文结构4.6 小结第5章 访问第三方服务5.1 upstream的使用方式5.1.1 ngx_http_upstream_t结构体5.1.2 设置upstream的限制性参数5.1.3 设置需要访问的第三方服务器地址5.1.4 设置回调方法5.1.5 如何启动upstream机制5.2 回调方法的执行场景5.2.1 create_request回调方法5.2.2 reinit_request回调方法5.2.3 finalize_request回调方法5.2.4 process_header回调方法5.2.5 rewrite_redirect回调方法5.2.6 input_filter_init与input_filter回调方法5.3 使用upstream的示例5.3.1 upstream的各种配置参数5.3.2 请求上下文5.3.3 在create_request方法中构造请求5.3.4 在process_header方法中解析包头5.3.5 在finalize_request方法中释放资源5.3.6 在ngx_http_mytest_handler方法中启动upstream5.4 subrequest的使用方式5.4.1 配置子请求的处理方式5.4.2 实现子请求处理完毕时的回调方法5.4.3 处理父请求被重新激活后的回调方法5.4.4 启动subrequest子请求5.5 subrequest执行过程中的主要场景5.5.1 如何启动subrequest5.5.2 如何转发多个子请求的响应包体5.5.3 子请求如何激活父请求5.6 subrequest使用的例子5.6.1 配置文件中子请求的设置5.6.2 请求上下文5.6.3 子请求结束时的处理方法5.6.4 父请求的回调方法5.6.5 启动subrequest5.7 小结第6章 开发一个简单的HTTP过滤模块6.1 过滤模块的意义6.2 过滤模块的调用顺序6.2.1 过滤链表是如何构成的6.2.2 过滤链表的顺序6.2.3 官方默认HTTP过滤模块的功能简介6.3 HTTP过滤模块的开发步骤6.4 HTTP过滤模块的简单例子6.4.1 如何编写config文件6.4.2 配置项和上下文6.4.3 定义HTTP过滤模块6.4.4 初始化HTTP过滤模块6.4.5 处理请求中的HTTP头部6.4.6 处理请求中的HTTP包体6.5 小结第7章 Nginx提供的高级数据结构7.1 Nginx提供的高级数据结构概述7.2 ngx_queue_t双向链表7.2.1 为什么设计ngx_queue_t双向链表7.2.2 双向链表的使用方法7.2.3 使用双向链表排序的例子7.2.4 双向链表是如何实现的7.3 ngx_array_t动态数组7.3.1 为什么设计ngx_array_t动态数组7.3.2 动态数组的使用方法7.3.3  使用动态数组的例子7.3.4 动态数组的扩容方式7.4 ngx_list_t单向链表7.5 ngx_rbtree_t红黑树7.5.1 为什么设计ngx_rbtree_t红黑树7.5.2 红黑树的特性7.5.3 红黑树的使用方法7.5.4 使用红黑树的简单例子7.5.5 如何自定义添加成员方法7.6 ngx_radix_tree_t基数树7.6.1 ngx_radix_tree_t基数树的原理7.6.2 基数树的使用方法7.6.3 使用基数树的例子7.7 支持通配符的散列表7.7.1 ngx_hash_t基本散列表7.7.2 支持通配符的散列表7.7.3 带通配符散列表的使用例子7.8 小结第三部分 深入Nginx第8章 Nginx基础架构8.1 Web服务器设计中的关键约束8.2 Nginx的架构设计8.2.1 优秀的模块化设计8.2.2 事件驱动架构8.2.3 请求的多阶段异步处理8.2.4 管理进程、多工作进程设计8.2.5 平台无关的代码实现8.2.6 内存池的设计8.2.7 使用统一管道过滤器模式的HTTP过滤模块8.2.8 其他一些用户模块8.3 Nginx框架中的核心结构体ngx_cycle_t8.3.1 ngx_listening_t结构体8.3.2 ngx_cycle_t结构体8.3.3 ngx_cycle_t支持的方法8.4 Nginx启动时框架的处理流程8.5 worker进程是如何工作的8.6 master进程是如何工作的8.7 小结第9章 事件模块9.1 事件处理框架概述9.2 Nginx事件的定义9.3 Nginx连接的定义9.3.1 被动连接9.3.2 主动连接9.3.3 ngx_connection_t连接池9.4 ngx_events_module核心模块9.4.1 如何管理所有事件模块的配置项9.4.2 管理事件模块9.5 ngx_event_core_module事件模块9.6 epoll事件驱动模块9.6.1 epoll的原理和用法9.6.2 如何使用epoll9.6.3 ngx_epoll_module模块的实现9.7 定时器事件9.7.1 缓存时间的管理9.7.2 缓存时间的精度9.7.3 定时器的实现9.8 事件驱动框架的处理流程9.8.1 如何建立新连接9.8.2 如何解决“惊群”问题9.8.3 如何实现负载均衡9.8.4 post事件队列9.8.5 ngx_process_events_and_timers流程9.9 文件的异步IO9.9.1 Linux内核提供的文件异步IO9.9.2 ngx_epoll_module模块中实现的针对文件的异步IO9.10 小结第10章 HTTP框架的初始化10.1 HTTP框架概述10.2 管理HTTP模块的配置项10.2.1 管理main级别下的配置项10.2.2 管理server级别下的配置项10.2.3 管理location级别下的配置项10.2.4 不同级别配置项的合并10.3 监听端口的管理10.4 server的快速检索10.5 location的快速检索10.6 HTTP请求的11个处理阶段10.6.1 HTTP处理阶段的普适规则10.6.2 NGX_HTTP_POST_READ_PHASE阶段10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段10.6.5 NGX_HTTP_REWRITE_PHASE阶段10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段10.6.7 NGX_HTTP_PREACCESS_PHASE阶段10.6.8 NGX_HTTP_ACCESS_PHASE阶段10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段10.6.11 NGX_HTTP_CONTENT_PHASE阶段10.6.12 NGX_HTTP_LOG_PHASE阶段10.7 HTTP框架的初始化流程10.8 小结第11章 HTTP框架的执行流程11.1 HTTP框架执行流程概述11.2 新连接建立时的行为11.3 第一次可读事件的处理11.4 接收HTTP请求行11.5 接收HTTP头部11.6 处理HTTP请求11.6.1 ngx_http_core_generic_phase11.6.2 ngx_http_core_rewrite_phase11.6.3 ngx_http_core_access_phase11.6.4 ngx_http_core_content_phase11.7 subrequest与post请求11.8 处理HTTP包体11.8.1 接收包体11.8.2 放弃接收包体11.9 发送HTTP响应11.9.1 ngx_http_send_header11.9.2 ngx_http_output_filter11.9.3 ngx_http_writer11.10 结束HTTP请求11.10.1 ngx_http_close_connection11.10.2 ngx_http_free_request11.10.3 ngx_http_close_request11.10.4 ngx_http_finalize_connection11.10.5 ngx_http_terminate_request11.10.6 ngx_http_finalize_request11.11 小结第12章 upstream机制的设计与实现12.1 upstream机制概述12.1.1 设计目的12.1.2 ngx_http_upstream_t数据结构的意义12.1.3 ngx_http_upstream_conf_t配置结构体12.2 启动upstream12.3 与上游服务器建立连接12.4 发送请求到上游服务器12.5 接收上游服务器的响应头部12.5.1 应用层协议的两段划分方式12.5.2 处理包体的3种方式12.5.3 接收响应头部的流程12.6 不转发响应时的处理流程12.6.1 input_filter方法的设计12.6.2 默认的input_filter方法12.6.3 接收包体的流程12.7 以下游网速优先来转发响应12.7.1 转发响应的包头12.7.2 转发响应的包体12.8 以上游网速优先来转发响应12.8.1 ngx_event_pipe_t结构体的意义12.8.2 转发响应的包头12.8.3 转发响应的包体12.8.4 ngx_event_pipe_read_upstream方法12.8.5 ngx_event_pipe_write_to_downstream方法12.9 结束upstream请求12.10 小结第13章 邮件代理模块13.1 邮件代理服务器的功能13.2 邮件模块的处理框架13.2.1 一个请求的8个独立处理阶段13.2.2 邮件类模块的定义13.2.3 邮件框架的初始化13.3 初始化请求13.3.1 描述邮件请求的ngx_mail_session_t结构体13.3.2 初始化邮件请求的流程13.4 接收并解析客户端请求13.5 邮件认证13.5.1 ngx_mail_auth_http_ctx_t结构体13.5.2 与认证服务器建立连接13.5.3 发送请求到认证服务器13.5.4 接收并解析响应13.6 与上游邮件服务器间的认证交互13.6.1 ngx_mail_proxy_ctx_t结构体13.6.2 向上游邮件服务器发起连接13.6.3 与邮件服务器认证交互的过程13.7 透传上游邮件服务器与客户端间的流13.8 小结第14章 进程间的通信机制14.1 概述14.2 共享内存14.3 原子操作14.3.1 不支持原子库下的原子操作14.3.2 x86架构下的原子操作14.3.3 自旋锁14.4 Nginx频道14.5 信号14.6 信号量14.7 文件锁14.8 互斥锁14.8.1 文件锁实现的ngx_shmtx_t锁14.8.2 原子变量实现的ngx_shmtx_t锁14.9 小结

内容摘要:

  阿里巴巴资深Nginx专家撰写,透彻解析Nginx架构,详解Nginx模块开发方法和技巧。  《深入理解Nginx模块开发与架构解析》是阿里巴巴资深Nginx技术专家呕心沥血之作,是作者多年的经验结晶,也是目前市场上唯一一本通过还原Nginx设计思想,剖析Nginx架构来帮助读者快速高效开发HTTP模块的图书。  《深入理解Nginx模块开发与架构解析》首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍如何开发HTTP模块(含HTTP过滤模块)来得到定制的Nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,如Nginx的基础数据结构、配置项的解析、记录日志的工具以及upstream、subrequest的使用方法等。在此基础上,综合Nginx框架代码分析Nginx的架构,介绍其设计理念和技巧,进一步帮助读者自由、有效地开发出功能丰富、性能一流的Nginx模块。【作者简介】  陶辉,思科后台工程师,从事服务端开发近十年,擅长Linux分布式架构下的海量数据处理,擅长C/C 开发的高性能高吞吐量网络服务,曾任思科DMS后台架构设计工作,曾在腾讯QQ空间后台个人信息中心、个人档、漂流瓶、空间日志、花藤、好友买卖等项目中担任服务器设计与开发工作,曾在华为中央软件部综合网管平台担任北向接口设计开发工作。拥有丰富的Linux高性能服务器开发经验,丰富的云存储系统开发经验,目前关注云文档管理系统和Nginx的再开发。

书籍规格:

书籍详细信息
书名深入理解Nginx站内查询相似图书
9787111414780
如需购买下载《深入理解Nginx》pdf扫描版电子书或查询更多相关信息,请直接复制isbn,搜索即可全网搜索该ISBN
出版地北京出版单位机械工业出版社
版次1版印次1
定价(元)79.0语种简体中文
尺寸24 × 19装帧平装
页数 583 印数 4000

书籍信息归属:

深入理解Nginx是机械工业出版社于2013.3出版的中图分类号为 TP393.09 的主题关于 Web服务器 的书籍。