深入理解Nginx
2021-10-23 14:44:39 0 举报
AI智能生成
Nginx是一个开源的、高性能、稳定的、可靠的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx采用了事件驱动的异步非阻塞架构,使其在高并发访问时具有很高的效率。此外,Nginx还内置了丰富的模块库,可以灵活地扩展其功能。总之,Nginx是一个功能强大且易于使用的Web服务器软件,适用于各种规模的应用场景。
作者其他创作
大纲/内容
第1章 研究Nginx前的准备工作
Nginx是什么
为什么选择Nginx
准备工作
Linux操作系统
使用Nginx的必备软件
磁盘目录
Linux内核参数的优化
获取Nginx源码
编译安装Nginx
configure详解
configure的命令参数
configure执行流程
configure生成的文件
Nginx的命令行控制
第2章 Nginx的配置
运行中的Nginx进程间的关系
Nginx配置的通用语法
块配置项
配置项的语法格式
配置项的注释
配置项的单位
在配置中使用变量
Nginx服务的基本配置
用于调试进程和定位问题的配置项
正常运行的配置项
优化性能的配置项
事件类配置项
用HTTP核心模块配置一个静态Web服务器
虚拟主机与请求的分发
文件路径的定义
内存及磁盘资源的分配
网络连接的设置
MIME类型的设置
对客户端请求的限制
文件操作的优化
对客户端请求的特殊处理
ngx_http_core_module模块提供的变量
用HTTP proxy module配置一个反向代理服务器
负载均衡的基本配置
反向代理的基本配置
第3章 开发一个简单的HTTP模块
如何调用HTTP模块
准备工作
整型的封装
ngx_str_t数据结构
ngx_list_t数据结构
ngx_table_elt_t数据结构
ngx_buf_t数据结构
ngx_chain_t数据结构
如何将自己的HTTP模块编译进Nginx
config文件的写法
利用configure脚本将定制的模块加入到Nginx中
直接修改Makefile文件
HTTP模块的数据结构
定义自己的HTTP模块
处理用户请求
处理方法的返回值
获取URI和参数
获取HTTP头部
获取HTTP包体
发送响应
发送HTTP头部
将内存中的字符串作为包体发送
经典的“Hello World”示例
将磁盘文件作为包体发送
如何发送磁盘中的文件
清理文件句柄
支持用户多线程下载和断点续传
用C++语言编写HTTP模块
编译方式的修改
程序中的符号转换
第4章 配置、error日志和请求上下文
http配置项的使用场景
怎样使用http配置
分配用于保存配置参数的数据结构
设定配置项的解析方式
使用14种预设方法解析配置项
自定义配置项处理方法
合并配置项
HTTP配置模型
解析HTTP配置的流程
HTTP配置模型的内存布局
如何合并配置项
预设配置项处理方法的工作原理
error日志的用法
请求的上下文
上下文与全异步Web服务器的关系
如何使用HTTP上下文
HTTP框架如何维护上下文结构
第5章 访问第三方服务
upstream的使用方式
ngx_http_upstream_t结构体
设置upstream的限制性参数
设置需要访问的第三方服务器地址
设置回调方法
如何启动upstream机制
回调方法的执行场景
create_request回调方法
reinit_request回调方法
finalize_request回调方法
process_header回调方法
rewrite_redirect回调方法
input_filter_init与input_filter回调方法
使用upstream的示例
upstream的各种配置参数
请求上下文
在create_request方法中构造请求
在process_header方法中解析包头
在finalize_request方法中释放资源
在ngx_http_mytest_handler方法中启动upstream
subrequest的使用方式
配置子请求的处理方式
实现子请求处理完毕时的回调方法
处理父请求被重新激活后的回调方法
启动subrequest子请求
subrequest执行过程中的主要场景
如何启动subrequest
如何转发多个子请求的响应包体
子请求如何激活父请求
subrequest使用的例子
配置文件中子请求的设置
请求上下文
子请求结束时的处理方法
父请求的回调方法
启动subrequest
第6章 开发一个简单的HTTP过滤模块
过滤模块的意义
过滤模块的调用顺序
过滤链表是如何构成的
过滤链表的顺序
官方默认HTTP过滤模块的功能简介
HTTP过滤模块的开发步骤
HTTP过滤模块的简单例子
如何编写config文件
配置项和上下文
定义HTTP过滤模块
初始化HTTP过滤模块
处理请求中的HTTP头部
处理请求中的HTTP包体
第7章 Nginx提供的高级数据结构
Nginx提供的高级数据结构概述
ngx_queue_t双向链表
为什么设计ngx_queue_t双向链表
双向链表的使用方法
使用双向链表排序的例子
双向链表是如何实现的
ngx_array_t动态数组
为什么设计ngx_array_t动态数组
动态数组的使用方法
使用动态数组的例子
动态数组的扩容方式
ngx_list_t单向链表
ngx_rbtree_t红黑树
为什么设计ngx_rbtree_t红黑树
红黑树的特性
红黑树的使用方法
使用红黑树的简单例子
如何自定义添加成员方法
ngx_radix_tree_t基数树
ngx_radix_tree_t基数树的原理
基数树的使用方法
使用基数树的例子
支持通配符的散列表
ngx_hash_t基本散列表
支持通配符的散列表
带通配符散列表的使用例子
第8章 Nginx基础架构
Web服务器设计中的关键约束
Nginx的架构设计
优秀的模块化设计
事件驱动架构
请求的多阶段异步处理
管理进程、多工作进程设计
平台无关的代码实现
内存池的设计
使用统一管道过滤器模式的HTTP过滤模块
其他一些用户模块
Nginx框架中的核心结构体ngx_cycle_t
ngx_listening_t结构体
ngx_cycle_t结构体
ngx_cycle_t支持的方法
Nginx启动时框架的处理流程
worker进程是如何工作的
master进程是如何工作的
ngx_pool_t内存池
第9章 事件模块
事件处理框架概述
Nginx事件的定义
Nginx连接的定义
被动连接
主动连接
ngx_connection_t连接池
ngx_events_module核心模块
如何管理所有事件模块的配置项
管理事件模块
ngx_event_core_module事件模块
epoll事件驱动模块
epoll的原理和用法
如何使用epoll
ngx_epoll_module模块的实现
定时器事件
缓存时间的管理
缓存时间的精度
定时器的实现
事件驱动框架的处理流程
如何建立新连接
如何解决“惊群”问题
如何实现负载均衡
post事件队列
ngx_process_events_and_timers流程
文件的异步I/O
Linux内核提供的文件异步I/O
ngx_epoll_module模块中实现的针对文件的异步I/O
TCP协议与Nginx
第10章 HTTP框架的初始化
HTTP框架概述
管理HTTP模块的配置项
管理main级别下的配置项
管理server级别下的配置项
管理location级别下的配置项
不同级别配置项的合并
监听端口的管理
server的快速检索
location的快速检索
HTTP请求的11个处理阶段
HTTP处理阶段的普适规则
NGX_HTTP_POST_READ_PHASE阶段
NGX_HTTP_SERVER_REWRITE_PHASE阶段
NGX_HTTP_FIND_CONFIG_PHASE阶段
NGX_HTTP_REWRITE_PHASE阶段
NGX_HTTP_POST_REWRITE_PHASE阶段
NGX_HTTP_PREACCESS_PHASE阶段
NGX_HTTP_ACCESS_PHASE阶段
NGX_HTTP_POST_ACCESS_PHASE阶段
NGX_HTTP_TRY_FILES_PHASE阶段
NGX_HTTP_CONTENT_PHASE阶段
NGX_HTTP_LOG_PHASE阶段
HTTP框架的初始化流程
第11章 HTTP框架的执行流程
HTTP框架执行流程概述
新连接建立时的行为
第一次可读事件的处理
接收HTTP请求行
接收HTTP头部
处理HTTP请求
ngx_http_core_generic_phase
ngx_http_core_rewrite_phase
ngx_http_core_access_phase
ngx_http_core_content_phase
subrequest与post请求
处理HTTP包体
接收包体
放弃接收包体
发送HTTP响应
ngx_http_send_header
ngx_http_output_filter
ngx_http_writer
结束HTTP请求
ngx_http_close_connection
ngx_http_free_request
ngx_http_close_request
ngx_http_finalize_connection
ngx_http_terminate_request
ngx_http_finalize_request
第12章 upstream机制的设计与实现
upstream机制概述
设计目的
ngx_http_upstream_t数据结构的意义
ngx_http_upstream_conf_t配置结构体
启动upstream
与上游服务器建立连接
发送请求到上游服务器
接收上游服务器的响应头部
应用层协议的两段划分方式
处理包体的3种方式
接收响应头部的流程
不转发响应时的处理流程
input_filter方法的设计
默认的input_filter方法
接收包体的流程
以下游网速优先来转发响应
转发响应的包头
转发响应的包体
以上游网速优先来转发响应
ngx_event_pipe_t结构体的意义
转发响应的包头
转发响应的包体
ngx_event_pipe_read_upstream方法
ngx_event_pipe_write_to_downstream方法
结束upstream请求
第13章 邮件代理模块
邮件代理服务器的功能
邮件模块的处理框架
一个请求的8个独立处理阶段
邮件类模块的定义
邮件框架的初始化
初始化请求
描述邮件请求的ngx_mail_session_t结构体
初始化邮件请求的流程
接收并解析客户端请求
邮件认证
ngx_mail_auth_http_ctx_t结构体
与认证服务器建立连接
发送请求到认证服务器
接收并解析响应
与上游邮件服务器间的认证交互
ngx_mail_proxy_ctx_t结构体
向上游邮件服务器发起连接
与邮件服务器认证交互的过程
透传上游邮件服务器与客户端间的流
第14章 进程间的通信机制
概述
共享内存
原子操作
不支持原子库下的原子操作
x86架构下的原子操作
自旋锁
Nginx频道
信号
信号量
文件锁
互斥锁
文件锁实现的ngx_shmtx_t锁
原子变量实现的ngx_shmtx_t锁
第15章 变量
使用内部变量开发模块
定义模块
定义http模块加载方式
解析配置中的变量
处理请求
内部变量工作原理
何时定义变量
相关数据结构详述
定义变量的方法
使用变量的方法
如何解析变量
定义内部变量
外部变量与脚本引擎
相关数据结构
编译“set”脚本
脚本执行流程
第16章 slab共享内存
操作slab共享内存的方法
使用slab共享内存池的例子
共享内存中的数据结构
操作共享内存中的红黑树与链表
解析配置文件
定义模块
slab内存管理的实现原理 605
内存结构布局
分配内存流程
释放内存流程
如何使用位操作
slab内存池间的管理
0 条评论
下一页