| 作者 |
| 王小东 李明江 |
| 丛书名 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782008071639 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------Nginx应用与运维实战--------------------------- 内容简介 这是一部基于Nginx新版本和云原生应用场景系统讲解Nginx的著作,是作者十余年运维经验的总结。本书从应用、运维以及与Kubernetes和微服务集成3个维度对Nginx的基础知识、工作原理、核心应用、运维管理、集成扩展等重点内容进行了全面、细致的讲解。完全以实战为导向,包含大量的配置案例和示例代码,能帮助读者快速掌握并在实际工作中熟练应用Nginx。 本书共13章,分为4个部分。 第一部分Nginx介绍(第1~4章) 首先,简要分析了Nginx的架构特点及实现原理;其次,讲解了Nginx及其衍生版本Tengine、OpenResty的编译与部署;接着,全面介绍了Nginx的核心配置指令;最后,讲解了动态赋值、访问控制和数据处理这3个Nginx的HTTP功能模块配置指令。 第二部分应用实战(第5~8章) 分别介绍Nginx 在Web服务、代理服务、缓存服务和负载均衡等方面的应用实战,对于所涉及的每个模块,不仅详细分析了相关的技术特点,还给出了具体的配置指令和配置样例。 第三部分运维管理(第9~11章) 首先介绍Nginx的日志配置及基于ELK的日志分析,其次讲解Nginx 的状态监控配置,以及如何利用监控工具Prometheus、Zabbix实现对Nginx的监控管理;最后介绍如何基于LVS、Keepalived搭建Nginx集群负载均衡架构,以及如何结合Jenkins、GitLab和Ansible快速搭建Web化的Nginx集群配置管理框架。 第四部分Nginx与Kubernetes和微服务的应用集成(第12、13章) 分别介绍Nginx在Kubernetes、微服务架构中的应用,包括在Kubernetes中Nginx Ingress 的部署、管理与配置,以及基于OpenResty的开源微服务网关软件Kong的部署与应用。 ---------------------------Nginx Lua开发实战--------------------------- . 本书围绕Nginx下Lua开发语言、Nginx核心工作机制、Nginx配置方法、核心数据组件和配置及API指令进行详细讲解。本书主要分五部分:第壹部分介绍Nginx的基本操作,同时讲解了MySQL、PostgreSQL、Redis、Memcached、MongoDB、OpenResty的基本操作。第二部分详细讲解了Lua脚本语言和Lua通用库。第三部分讲解了在Nginx开发中经常使用到的一些技术,如:JSON数据交换格式、nginx.conf配置方法和配置指令;还讲解了Nginx下Lua开发的实现机制。第四部分详细介绍了常用Lua库和数据库等组件的使用方法,包括:Redis、MySQL、Memcached、PostgreSQL、MongoDB、Bit、lfs、restry.http、lcurl、FFI、cjson、Template、WebSocket。第五部分详细介绍了ngx_lua的配置指令和ngx_luaAPI,目的是帮助读者在工作中快速检索配置指令和API。 |
| 目录 |
---------------------------Nginx应用与运维实战--------------------------- 前言 第1章 Nginx概述1 1.1 Nginx的不同版本1 1.1.1 开源版Nginx2 1.1.2 商业版Nginx Plus3 1.1.3 分支版本Tengine4 1.1.4 扩展版本OpenResty4 1.2 Nginx源码架构浅析5 1.2.1 多进程模型6 1.2.2 工作流机制9 1.2.3 模块化12 第2章 Nginx编译及部署14 2.1 编译环境准备14 2.1.1 操作系统的准备14 2.1.2 Linux内核参数15 2.2 Nginx源码编译17 2.2.1 Nginx源码获取17 2.2.2 编译配置参数17 2.2.3 代码编译20 2.2.4 添加第三方模块21 2.3 Tengine源码编译21 2.3.1 Tengine源码获取21 2.3.2 编译配置参数22 2.3.3 代码编译22 2.3.4 Tengine集成的模块22 2.4 OpenResty源码编译24 2.4.1 OpenResty源码获取24 2.4.2 编译配置参数24 2.4.3 代码编译25 2.4.4 OpenResty集成的模块26 2.5 Nginx部署28 2.5.1 环境配置28 2.5.2 命令行参数28 2.5.3 注册系统服务29 2.6 Nginx的Docker容器化部署30 2.6.1 Docker简介30 2.6.2 Docker环境安装31 2.6.3 Dockerfile常用命令及编写31 2.6.4 Nginx Docker运行33 第3章 Nginx核心配置指令35 3.1 Nginx配置文件解析35 3.1.1 配置文件36 3.1.2 配置文件结构36 3.1.3 配置文件中的计量单位38 3.1.4 配置文件中的哈希表39 3.2 Nginx的进程核心配置指令39 3.2.1 进程管理39 3.2.2 进程调优40 3.2.3 进程调试44 3.2.4 事件处理45 3.2.5 核心指令配置样例48 3.3 HTTP核心配置指令48 3.3.1 初始化服务49 3.3.2 HTTP请求处理55 3.3.3 访问路由location65 3.3.4 访问重写rewrite69 3.3.5 访问控制73 3.3.6 数据处理76 3.3.7 关闭连接85 3.3.8 日志记录87 3.3.9 HTTP核心配置样例87 第4章 Nginx HTTP模块详解91 4.1 动态赋值功能模块91 4.1.1 根据浏览器动态赋值92 4.1.2 根据IP动态赋值94 4.1.3 根据IP动态获取城市信息95 4.1.4 比例分配赋值98 4.1.5 变量映射赋值98 4.2 访问控制功能模块101 4.2.1 访问镜像模块101 4.2.2 referer请求头控制模块102 4.2.3 连接校验模块104 4.2.4 源IP访问控制模块105 4.2.5 基本认证模块106 4.2.6 认证转发模块107 4.2.7 用户cookie模块109 4.2.8 并发连接数限制模块112 4.2.9 请求频率限制模块114 4.3 数据处理功能模块116 4.3.1 首页处理116 4.3.2 图片处理118 4.3.3 响应处理121 4.3.4 数据修改124 4.3.5 gzip压缩126 第5章 Nginx Web服务应用实战130 5.1 静态文件服务器的搭建130 5.1.1 静态Web服务器130 5.1.2 文件下载服务器131 5.1.3 伪动态SSI服务器132 5.2 HTTPS安全服务器的搭建137 5.2.1 配置指令137 5.2.2 HTTPS基本配置139 5.2.3 HTTPS密钥交换算法141 5.2.4 HTTPS会话缓存142 5.2.5 HTTPS双向认证配置143 5.2.6 HTTPS吊销证书配置144 5.2.7 HTTPS配置样例145 5.3 PHP网站搭建146 5.3.1 FastCGI模块指令146 5.3.2 PHP环境安装150 5.3.3 PHP网站配置样例151 5.3.4 FastCGI集群负载及缓存152 5.4 Python网站的搭建154 5.4.1 CGI、FastCGI、SCGI、WSGI154 5.4.2 uWSGI模块指令155 5.4.3 Python网站的搭建159 5.5 XSLT转换服务器162 5.5.1 模块配置指令162 5.5.2 XSLT服务器配置样例162 5.6 伪流媒体服务器的搭建164 5.6.1 模块配置指令165 5.6.2 伪流媒体配置样例165 5.7 HTTP增强协议服务器的搭建168 5.7.1 HTTP/2协议服务168 5.7.2 WebDAV协议服务169 第6章 Nginx代理服务应用实战173 6.1 HTTP代理173 6.1.1 模块指令173 6.1.2 正向代理177 6.1.3 HTTP的反向代理179 6.1.4 HTTPS的反向代理181 6.1.5 反向代理的真实客户端IP184 6.2 TCP/UDP代理185 6.2.1 stream核心模块185 6.2.2 stream辅助模块187 6.2.3 TCP/UDP代理194 6.2.4 基于SSL的TCP代理197 6.2.5 TCP/UDP代理的真实客户端IP199 6.3 gRPC代理202 6.3.1 gRPC介绍202 6.3.2 gRPC模块指令202 6.3.3 gRPC反向代理配置204 第7章 Nginx缓存服务应用实战206 7.1 Web缓存206 7.1.1 客户端缓存207 7.1.2 正向代理缓存211 7.1.3 内容分发网络211 7.1.4 反向代理缓存212 7.2 Nginx缓存模块213 7.2.1 代理缓存模块213 7.2.2 Memcached缓存模块218 7.3 Nginx缓存应用219 7.3.1 代理缓存服务器219 7.3.2 镜像缓存应用221 7.3.3 Memcached缓存应用223 7.3.4 客户端缓存控制226 7.4 缓存服务的管理与维护227 7.4.1 模块编译228 7.4.2 模块指令228 第8章 Nginx负载均衡应用实战231 8.1 Nginx负载均衡模块231 8.1.1 服务器配置指令232 8.1.2 负载均衡策略指令234 8.2 负载均衡策略236 8.2.1 轮询236 8.2.2 一致性哈希237 8.2.3 IP哈希239 8.2.4 最少连接240 8.2.5 随机负载算法241 8.3 负载均衡配置242 8.3.1 负载均衡的长连接242 8.3.2 upstream的容错机制245 8.3.3 动态更新upstream248 8.3.4 HTTP负载均衡配置253 8.3.5 FastCGI负载均衡配置253 8.3.6 uWSGI负载均衡配置254 8.3.7 gRPC负载均衡配置254 8.3.8 Memcached负载均衡配置255 8.4 TCP/UDP负载均衡255 8.4.1 TCP/UDP负载均衡255 8.4.2 TCP/UDP负载均衡的容错机制257 第9章 Nginx日志管理259 9.1 Nginx日志配置259 9.1.1 访问日志259 9.1.2 错误日志263 9.1.3 日志归档Logrotate264 9.1.4 日志输出到syslog268 9.2 Nginx日志收集分析269 9.2.1 ELK简介269 9.2.2 ELK安装271 9.2.3 Nginx日志分析276 第10章 Nginx监控配置及管理278 10.1 Nginx连接状态监控278 10.1.1 Nginx连接状态278 10.1.2 Nginx连接状态模块指令280 10.1.3 基于Zabbix的连接状态监控280 10.2 HTTP主机状态监控282 10.2.1 模块编译282 10.2.2 模块配置指令282 10.2.3 主机状态监控配置286 10.3 TCP/UDP主机状态监控287 10.3.1 模块编译287 10.3.2 模块配置指令287 10.3.3 TCP/UDP主机状态监控配置290 10.4 监控工具Prometheus291 10.4.1 Prometheus简介291 10.4.2 Prometheus部署292 10.4.3 监控HTTP主机状态296 10.4.4 监控TCP/UDP主机状态299 10.4.5 Prometheus监控告警302 10.5 监控工具Zabbix304 10.5.1 Zabbix简介305 10.5.2 Zabbix环境搭建306 10.5.3 Zabbix Agent安装310 10.5.4 Zabbix获取Prometheus数据311 第11章 Nginx集群负载与配置管理314 11.1 Nginx集群负载315 11.1.1 多层负载均衡架构315 11.1.2 LVS简介315 11.1.3 Keepalived简介320 11.1.4 Nginx集群负载搭建327 11.2 Nginx集群配置管理331 11.2.1 Nginx集群配置管理规划331 11.2.2 配置归档工具GitLab335 11.2.3 配置修改工具Ansible336 11.2.4 配置发布工具Jenkins338 11.2.5 Nginx配置管理实例340 第12章 Nginx在Kubernetes中的应用351 12.1 Kubernetes简介352 12.1.1 Kubernetes架构简述352 12.1.2 Kubernetes相关术语353 12.1.3 Kubernetes集群部署360 12.1.4 Kubernetes网络通信366 12.2 Nginx Ingress375 12.2.1 Nginx Ingress原理375 12.2.2 集成的第三方模块376 12.2.3 安装部署378 12.2.4 日志管理383 12.2.5 监控管理384 12.3 Nginx Ingress配置385 12.3.1 配置映射ConfigMap385 12.3.2 注解Annotations396 第13章 Nginx在微服务架构中的应用411 13.1 认识微服务411 13.1.1 为什么需要微服务411 13.1.2 微服务的技术特点414 13.1.3 微服务的进化416 13.2 基于Nginx的微服务网关418 13.2.1 Nginx产品组件419 13.2.2 开源微服务网关Kong419 13.2.3 安装部署423 13.2.4 微服务网关应用427 ---------------------------Nginx Lua开发实战--------------------------- 前言 第一部分 Nginx操作基础 第1章 Nginx高效服务器 2 1.1 Nginx的特点 2 1.2 Nginx的安装 3 1.3 configure命令参数 7 1.4 小结 12 第2章 数据库的基本操作 13 2.1 Nginx应用中的数据库 13 2.2 MySQL关系型数据库 15 2.2.1 yum安装方法 16 2.2.2 使用mysql测试服务 18 2.2.3 MySQL文件分布 19 2.2.4 数据库操作 19 2.3 Redis内存数据库 22 2.3.1 Redis安装 22 2.3.2 启动Redis服务 23 2.3.3 Redis 配置 23 2.3.4 参数说明 26 2.3.5 数据类型 29 2.4 PostgreSQL关系型数据库 31 2.5 Memcached内存数据库 33 2.5.1 Memcached安装 34 2.5.2 连接编辑 34 2.5.3 管理Memcached服务 35 2.5.4 Memcached命令 37 2.6 MongoDB分布式NoSQL数据库 42 2.6.1 MongoDB安装 43 2.6.2 mongod.conf配置说明 45 2.7 小结 48 第3章 OpenResty 49 3.1 OpenResty:概述 49 3.2 OpenResty的组成 50 3.3 OpenResty的安装 52 3.4 Nginx多实例 54 3.5 小结 54 第4章 Nginx核心技术 55 4.1 Nginx设计目标 55 4.2 Nginx架构 57 4.2.1 事件驱动 57 4.2.2 异步多阶段处理 59 4.2.3 模块化设计 61 4.2.4 管理进程、工作进程设计 63 4.2.5 内存池 65 4.2.6 连接池 66 4.2.7 时间缓存 66 4.2.8 延迟关闭 67 4.2.9 跨平台 67 4.2.10 HTTP模块管道过滤模式 67 4.2.11 keepalive 68 4.2.12 pipeline 69 4.3 小结 69 第5章 Nginx的工作流程 70 5.1 Nginx的启动流程 70 5.2 管理进程的工作流程 72 5.3 工作进程的工作流程 75 5.4 配置加载流程 76 5.5 HTTP框架初始化流程 79 5.6 HTTP模块调用流程 81 5.7 HTTP请求处理流程 82 5.8 小结 83 第二部分 Lua脚本语言 第6章 Lua教程 86 6.1 Lua基础 86 6.1.1 Lua的特性 86 6.1.2 Lua的应用场景 87 6.1.3 安装Lua环境 87 6.2 Lua基本语法 88 6.2.1 第一个Lua程序 88 6.2.2 注释 89 6.2.3 标识符 90 6.2.4 关键词 90 6.2.5 全局变量 90 6.3 Lua的数据类型 90 6.4 Lua变量 96 6.4.1 赋值语句 96 6.4.2 索引 97 6.5 Lua循环 98 6.6 Lua流程控制 98 6.7 Lua函数 99 6.7.1 函数的定义 99 6.7.2 多返回值 100 6.7.3 可变参数 101 6.8 Lua运算符 101 6.8.1 算术运算符 102 6.8.2 关系运算符 102 6.8.3 逻辑运算符 103 6.8.4 其他运算符 104 6.8.5 运算符的优先级 105 6.9 Lua字符串 106 6.10 Lua数组 107 6.10.1 一维数组 107 6.10.2 多维数组 108 6.11 Lua迭代器 109 6.11.1 泛型for迭代器 109 6.11.2 无状态的迭代器 110 6.11.3 多状态的迭代器 111 6.12 Lua表 112 6.13 Lua模块与包 113 6.13.1 require函数 114 6.13.2 加载机制 115 6.13.3 C包 115 6.14 Lua元表 116 6.14.1 _index元方法 117 6.14.2 _newindex元方法 118 6.14.3 为表添加运算符 119 6.14.4 _call元方法 119 6.14.5 _tostring元方法 120 6.15 Lua协同程序 121 6.15.1 基本语法 121 6.15.2 生产者–消费者问题 124 6.16 Lua错误处理 125 6.16.1 语法错误 125 6.16.2 运行错误 125 6.16.3 错误处理 126 6.16.4 error函数 126 6.16.5 pcall、xpcall、debug 127 6.17 Lua调试 128 6.18 Lua垃圾回收 130 6.19 Lua面向对象 131 6.19.1 Lua中面向对象 132 6.19.2 Lua继承 134 6.20 Lua数据库访问 136 6.21 小结 137 第7章 Lua通用库 138 7.1 字符串库 138 7.2 表库 141 7.3 文件I/O库 143 7.3.1 简单模式 144 7.3.2 完全模式 145 7.3.3 其他方法 146 7.4 数学库 147 7.5 操作系统库 150 7.6 小结 151 第三部分 Nginx开发技术 第8章 JSON数据交换格式 154 8.1 什么是JSON 154 8.2 JSON转换为JavaScript对象 155 8.3 JSON与XML的比较 155 8.4 JSON语法规则 156 8.5 格式化 157 8.6 小结 158 第9章 nginx.conf文件配置 159 9.1 默认nginx.conf文件 159 9.2 nginx.conf示例 162 9.3 全局配置与顶层配置块 166 9.3.1 main全局配置 166 9.3.2 events配置块 170 9.3.3 http服务器配置块 172 9.3.4 ngx_http_core_module变量 194 9.3.5 stream 195 9.4 中文版nginx.conf 201 9.5 小结 204 第10章 Nginx下Lua实现机制 206 10.1 ngx_lua原理 206 10.2 HTTP请求的处理阶段 209 10.3 ngx_lua的处理阶段 210 10.4 Lua阶段解析 212 10.4.1 init_by_lua 212 10.4.2 init_worker_by_lua 213 10.4.3 set_by_lua 214 10.4.4 rewrite_by_lua 216 10.4.5 access_by_lua 217 10.4.6 content_by_lua 218 10.4.7 header_filter_by_lua 220 10.4.8 body_filter_by_lua 220 10.4.9 log_by_lua 220 10.4.10 balancer_by_lua_block 221 10.5 小结 222 第四部分 Nginx Lua开发实战 第11章 Redis操作 224 11.1 Redis操作方法概述 224 11.2 HttpRedis访问方法 225 11.2.1 示例 225 11.2.2 HttpRedis API 226 11.2.3 HttpRedis变量 228 11.3 HttpRedis2Module访问方法 229 11.3.1 示例 229 11.3.2 nginx.conf配置 230 11.3.3 常用指令 231 11.3.4 技术点 234 11.3.5 应答包解析 238 11.4 lua-resty-redis访问方法 239 11.4.1 示例 239 11.4.2 API函数 240 11.4.3 技术点 244 11.4.4 问题列表 246 11.4.5 限制 247 11.4.6 安装 247 11.5 小结 247 第12章 MySQL操作 248 12.1 lua-restry-mysql访问方式 248 12.1.1 示例 248 12.1.2 安装 250 12.1.3 方法与函数 251 12.1.4 多结果集返回示例 254 12.1.5 其他注意事项 255 12.1.6 限制 255 12.2 HttpDrizzleModule访问方式 255 12.2.1 示例 256 12.2.2 安装 257 12.2.3 技术点 258 12.2.4 配置指令 259 12.2.5 变量 263 12.2.6 输出格式 264 12.3 HttpDrizzleModule完整示例 265 12.4 小结 272 第13章 Memcached操作 273 13.1 mem-nginx-module访问方式 273 13.1.1 概述 273 13.1.2 命令 276 13.1.3 指令 279 13.1.4 安装 281 13.1.5 说明 281 13.1.6 示例 282 13.2 lua-resty-memcached 访问方式 285 13.2.1 概述 285 13.2.2 API 286 13.2.3 自动日志 291 13.2.4 限制 291 13.3 小结 291 第14章 PostgreSQL操作 292 14.1 概述 292 14.2 配置指令 293 14.3 配置变量 295 14.4 示例 296 14.5 小结 298 第15章 MongoDB操作 299 15.1 安装 299 15.2 配置 299 15.3 操作函数 300 15.3.1 连接对象方法 300 15.3.2 数据库对象方法 301 15.3.3 列对象方法 301 15.4 示例 302 15.5 小结 303 第16章 bit库的使用 304 16.1 示例 304 16.2 安装 305 16.3 函数 305 16.4 说明 307 16.5 小结 308 第17章 lfs库的使用 309 17.1 迭代示例 309 17.2 安装 310 17.3 LuaFileSystem函数 310 17.4 小结 312 第18章 resty.http库的使用 313 18.1 安装 313 18.2 概述 314 18.3 函数 315 18.3.1 连接类 315 18.3.2 应答类 318 18.3.3 代理类 319 18.3.4 工具类 319 18.4 小结 320 第19章 lcurl库的使用 321 19.1 安装 321 19.1.1 安装libcurl 321 19.1.2 安装lcurl 322 19.2 示例 322 19.3 函数 324 19.3.1 httpform类 325 19.3.2 easy类 327 19.3.3 multi类 331 19.3.4 error类 333 19.3.5 share类 333 19.4 常用变量 334 19.4.1 字符串数组类选项 334 19.4.2 字符串选项 334 19.4.3 数值型选项 336 19.4.4 布尔型选项 337 19.5 完整示例 338 19.6 小结 340 第20章 FFI扩展C库 341 20.1 示例 341 20.1.1 调用外部C函数 341 20.1.2 使用C结构体数据 342 20.2 FFI库的使用 344 20.2.1 载入FFI库 344 20.2.2 访问标准系统函数 344 20.2.3 访问zlib压缩库 345 20.2.4 为一个C类型定义元方法 346 20.2.5 转换C语法 347 20.3 FFI API 348 20.3.1 声明和访问外部符号 348 20.3.2 创建cdata对象 349 20.3.3 C类型信息 349 20.3.4 功能函数 350 20.3.5 特定目标信息 351 20.3.6 方法回调 351 20.3.7 扩展标准库函数 351 20.4 调用curl库的完整示例 352 20.5 小结 352 第21章 cjson库的使用 353 21.1 示例 353 21.2 函数 354 21.3 变量 358 21.4 小结 358 第22章 lua-resty-template类的使用 359 22.1 示例 359 22.2 模板符号 360 22.2.1 短转义符号 361 22.2.2 上下文表中的复杂key 361 22.2.3 HTML转义 361 22.2.4 保留的上下文key和评论 362 22.3 安装 363 22.3.1 Nginx/OpenResty配置 363 22.3.2 使用document_root 363 22.3.3 使用template_root 364 22.3.4 使用template_location 364 22.4 Lua API 364 22.5 模板预编译 368 22.6 模板助手 368 22.7 用法示例 369 22.7.1 引用模板 369 22.7.2 Layouts的views 370 22.7.3 使用Blocks 371 22.7.4 继承 373 22.7.5 Macros 374 22.7.6 调用模板中的方法 375 22.7.7 模板内嵌的Angular或其他标签/模板 376 22.7.8 模板内嵌的Markdown 376 22.7.9 LSP 377 22.8 FAQ 378 22.9 小结 379 第23章 WebSocket的使用 380 23.1 示例 381 23.2 安装 383 23.3 resty.websocket.server 383 23.4 resty.websocket.client 386 23.5 resty.websocket.protocol 389 23.6 使用注意事项 390 23.7 小结 390 第24章 TCP私有服务器实例 391 24.1 协议 391 24.1.1 协议总体要求 391 24.1.2 包头定义 392 24.1.3 协议命令 393 24.2 DDP系统架构 394 24.3 DDP服务实现 395 24.3.1 nginx.conf配置 395 24.3.2 init.lua 398 24.3.3 ddp.lua 399 24.3.4 DDP代码解析 405 24.3.5 Redis和MySQL的 location 407 24.3.6 管理页面REST操作 411 24.4 小结 412 第25章 WebSocket接入服务器实战 413 25.1 nginx.conf内容 413 25.2 ws_svr.lua内容 421 25.3 update_alarts代码 436 25.4 小结 438 第26章 Nginx应用简述 439 26.1 简单系统 439 26.2 读写分离系统 439 26.3 引入缓存系统 440 26.4 缓存主从系统 441 26.5 小结 442 第五部分 开发手册 第27章 ngx_lua_module模块配置指令详解 444 27.1 概述 444 27.2 Lua配置顺序 456 27.3 配置指令 457 27.4 小结 487 第28章 ngx_lua API详解 488 28.1 概述 488 28.2 API与常量 491 28.3 小结 565 |