计算机
类型
6.5
豆瓣评分
可以朗读
语音朗读
155千字
字数
2019-03-01
发行日期
展开全部
主编推荐语
本书是一本结合Lua语言的Nginx进阶书籍,涵盖基础、中高级、进阶内容与架构设计。
内容简介
本书分为五个部分,基础内容,包括安装、基础配置等相关内容;中级内容,包括模块、Lua语言的引入、TCP服务等内容;高级内容,包括Nginx的配置需求和重构、CDN代理下的Nginx、日志集中的存储方案、爬虫、Lua的容错设计等内容;进阶内容,包括日志分析、Nginx防御体系、重构proxy_cache缓存系统、性能优化、Lua的执行阶段、业务模式下Lua的Nginx API、Resty库等内容;架构设计,包括主流的动态upstream方案、伸缩的魅力、静态容灾系统、全站验证码设计、动态图片剪裁方案设计以及Nginx常见问题等。 本书是一本结合Lua语言的Nginx进阶书籍。
目录
- 封面
- 书名页
- 内容简介
- 版权页
- 前 言
- 目录
- 第1章 Nginx学前必知
- 1.1 HTTP请求报文
- 1.2 HTTP响应报文
- 1.3 安装Nginx
- 1.4 支持HTTPS
- 1.5 添加模块
- 1.6 小结
- 第2章 基础配置
- 2.1 Nginx指令和指令块
- 2.2 Nginx基本配置说明
- 2.2.1 main配置
- 2.2.2 与客户端有关的配置
- 2.2.3 schmerver块
- 2.2.4 location块
- 2.3 include的使用
- 2.4 常见配置
- 2.4.1 常见配置注解
- 2.4.2 常见配置实战技巧
- 2.5 内置变量
- 2.5.1 常见内置变量
- 2.5.2 常见内置变量实战技巧
- 2.6 小结
- 第3章 强化基础配置
- 3.1 牢记Context
- 3.2 获取请求的IP地址
- 3.2.1 获取用户的真实IP地址
- 3.2.2 防止IP地址伪造
- 3.2.3 后端服务器对IP地址的需求
- 3.3 管理请求的行为
- 3.3.1 限制IP地址的访问
- 3.3.2 auth身份验证
- 3.3.3 利用LDAP服务加强安全
- 3.3.4 satisfy二选一的访问限制功能
- 3.4 proxy代理
- 3.4.1 proxy_pass请求代理规则
- 3.4.2 减少后端服务器的网络开销
- 3.4.3 控制请求头和请求体
- 3.4.4 控制请求和后端服务器的交互时间
- 3.5 upstream使用手册
- 3.5.1 代理多台服务器
- 3.5.2 故障转移
- 3.5.3 负载均衡
- 3.5.4 通过hash分片提升缓存命中率
- 3.5.5 利用长连接提升性能
- 3.5.6 利用resolver加速对内部域名的访问
- 3.6 rewrite使用手册
- 3.6.1 内部重定向
- 3.6.2 域名跳转
- 3.6.3 跳转POST请求
- 3.6.4 设置变量的值
- 3.7 限速白名单
- 3.8 日志
- 3.8.1 记录自定义变量
- 3.8.2 日志格式规范
- 3.8.3 日志存储
- 3.9 HTTP执行阶段
- 3.10 小结
- 第4章 常用模块精解
- 4.1 定制HTTP头信息
- 4.1.1 使用ngx_http_headers_module设置响应头
- 4.1.2 使用headers-more-nginx控制请求头和响应头
- 4.2 第三方模块set-misc-nginx
- 4.2.1 设置变量
- 4.2.2 防止SQL注入
- 4.2.3 字符串非转义和转义
- 4.2.4 基于键值的集群分片
- 4.2.5 base编码
- 4.2.6 md5编码
- 4.2.7 生成随机数
- 4.2.8 本地时间的输出
- 4.2.9 实战经验
- 4.3 图片的处理
- 4.3.1 image_filter图片处理
- 4.3.2 采用渐进式方式打开JPEG图片
- 4.3.3 WebP格式
- 4.3.4 优化图片
- 4.3.5 实战经验:动态切图
- 4.4 TCP和UDP代理
- 4.4.1 代理配置说明
- 4.4.2 DNS服务的反向代理
- 4.4.3 MySQL集群代理配置
- 4.4.4 实战经验
- 4.5 常用模块介绍
- 4.5.1 基于访问IP地址跳转到对应城市
- 4.5.2 修改响应内容
- 4.5.3 零像素文件的生成及其作用
- 4.5.4 图片的防盗链
- 4.6 小结
- 第5章 缓存系统
- 5.1 缓存配置说明
- 5.2 控制缓存有效期
- 5.3 性能优化
- 5.3.1 缓存未命中的最佳实践
- 5.3.2 横向扩展最佳实践
- 5.3.3 避免硬盘I/O阻塞
- 5.3.4 集群模式
- 5.4 高可用方案
- 5.5 proxy_cache配置模板
- 5.6 小结
- 第6章 引入Lua
- 6.1 引入Lua的原因
- 6.2 Lua和LuaJIT
- 6.3 环境搭建
- 6.4 Lua的数据类型
- 6.4.1 类型说明
- 6.4.2 类型示例
- 6.5 表达式
- 6.5.1 算术运算符
- 6.5.2 关系运算符
- 6.5.3 逻辑运算符
- 6.5.4 字符串连接和字符串长度计算
- 6.5.5 运算符优先级
- 6.6 变量
- 6.6.1 全局变量
- 6.6.2 局部变量
- 6.6.3 变量赋值
- 6.7 流程控制
- 6.7.1 if-else
- 6.7.2 for循环
- 6.7.3 while循环
- 6.7.4 break和return
- 6.8 函数
- 6.8.1 函数格式
- 6.8.2 传参方式
- 6.8.3 函数的创建位置
- 6.9 模块
- 6.9.1 模块格式
- 6.9.2 加载模块
- 6.10 Lua常见操作
- 6.10.1 操作table
- 6.10.2 定义字符串
- 6.10.3 字符串连接
- 6.11 引入Lua的插曲
- 6.12 小结
- 第7章 Lua-Nginx-Module常用指令
- 7.1 Nginx和OpenResty
- 7.2 安装Ngx_Lua
- 7.3 牢记Context
- 7.4 Hello World
- 7.5 避免I/O阻塞
- 7.6 定义模块搜索路径
- 7.6.1 定义Lua模块的搜索路径
- 7.6.2 定义C模块的搜索路径
- 7.7 读/写Nginx的内置变量
- 7.8 控制请求头
- 7.8.1 添加请求头
- 7.8.2 清除请求头
- 7.8.3 获取请求头
- 7.9 控制响应头
- 7.9.1 获取响应头
- 7.9.2 修改响应头
- 7.9.3 清除响应头
- 7.10 读取请求体
- 7.10.1 强制获取请求体
- 7.10.2 用同步非阻塞方式获取请求体
- 7.10.3 使用场景示例
- 7.10.4 使用建议
- 7.11 输出响应体
- 7.11.1 异步发送响应体
- 7.11.2 同步发送响应体
- 7.12 正则表达式
- 7.12.1 单一捕获
- 7.12.2 全部捕获
- 7.12.3 更高效的匹配和捕获
- 7.12.4 替换数据
- 7.12.5 转义符号
- 7.13 子请求
- 7.13.1 请求方法
- 7.13.2 单一子请求
- 7.13.3 并发子请求
- 7.14 获取Nginx的环境变量
- 7.14.1 获取环境所在的模块
- 7.14.2 确认调试模式
- 7.14.3 获取prefix路径
- 7.14.4 获取Nginx的版本号
- 7.14.5 获取configure信息
- 7.14.6 获取Ngx_Lua的版本号
- 7.14.7 判断worker进程是否退出
- 7.14.8 获取worker进程的ID
- 7.14.9 获取worker进程的数量
- 7.15 定时任务
- 7.15.1 创建定时任务
- 7.15.2 性能优化
- 7.15.3 禁用的Lua API
- 7.16 常用指令
- 7.16.1 请求重定向
- 7.16.2 日志记录
- 7.16.3 请求中断处理
- 7.17 提升开发和测试效率
- 7.17.1 断开客户端连接
- 7.17.2 请求休眠
- 7.17.3 获取系统时间
- 7.17.4 编码与解码
- 7.17.5 防止SQL注入
- 7.17.6 判断是否为子请求
- 7.17.7 设置MIME类型
- 7.18 小结
- 第8章 Ngx_Lua的执行阶段
- 8.1 init_by_lua_block
- 8.1.1 阶段说明
- 8.1.2 初始化配置
- 8.1.3 控制初始值
- 8.1.4 init_by_lua_file
- 8.1.5 可使用的Lua API指令
- 8.2 init_worker_by_lua_block
- 8.2.1 阶段说明
- 8.2.2 启动Nginx的定时任务
- 8.2.3 动态进行后端健康检查
- 8.3 set_by_lua_block
- 8.3.1 阶段说明
- 8.3.2 变量赋值
- 8.3.3 rewrite阶段的混用模式
- 8.3.4 阻塞事件
- 8.3.5 被禁用的Lua API指令
- 8.4 rewrite_by_lua_block
- 8.4.1 阶段说明
- 8.4.2 利用rewrite_by_lua_no_postpone改变执行顺序
- 8.4.3 阶段控制
- 8.5 access_by_lua_block
- 8.5.1 阶段说明
- 8.5.2 利用access_by_lua_no_postpone改变执行顺序
- 8.5.3 阶段控制
- 8.5.4 动态配置黑白名单
- 8.6 content_by_lua_block
- 8.6.1 阶段说明
- 8.6.2 动态调整执行文件的路径
- 8.7 balancer_by_lua_block
- 8.7.1 阶段说明
- 8.7.2 被禁用的Lua API指令
- 8.8 header_filter_by_lua_block
- 8.8.1 阶段说明
- 8.8.2 被禁用的Lua API指令
- 8.9 body_filter_by_lua_block
- 8.9.1 阶段说明
- 8.9.2 控制响应体数据
- 8.9.3 被禁用的Lua API指令
- 8.10 log_by_lua_block
- 8.10.1 阶段说明
- 8.10.2 被禁用的Lua API指令
- 8.11 Lua和ngx.ssl
- 8.12 Ngx_Lua执行阶段
- 8.13 小结
- 第9章 Nginx与数据库的交互
- 9.1 安装cjson
- 9.2 与MySQL交互
- 9.2.1 安装lua-resty-mysql模块
- 9.2.2 读取MySQL数据
- 9.2.3 执行多条SQL语句
- 9.2.4 防止SQL注入
- 9.3 与Redis交互
- 9.3.1 安装lua-resty-redis
- 9.3.2 读/写Redis
- 9.3.3 管道命令
- 9.3.4 密码登录
- 9.3.5 其他执行命令
- 9.4 与数据库交互的常见问题
- 9.4.1 连接池
- 9.4.2 读/写分离
- 9.4.3 分离配置文件和代码
- 9.5 小结
- 第10章 缓存利器
- 10.1 worker进程的共享内存
- 10.1.1 创建共享内存区域
- 10.1.2 操作共享内存
- 10.1.3 制造消息队列
- 10.1.4 lua-resty-core
- 10.1.5 配置环境
- 10.2 Lua模块下的共享内存
- 10.2.1 安装lua-resty-lrucache
- 10.2.2 使用lua-resty-lrucache进行缓存的方法
- 10.3 当前请求在各执行阶段间的数据共享
- 10.3.1 ngx.ctx的使用
- 10.3.2 子请求和内部重定向的缓存区别
- 10.4 利用共享内存配置动态IP地址认证
- 10.5 缓存和数据库的交互
- 10.5.1 从数据库获取数据
- 10.5.2 避免出现因缓存失效引起的“风暴”
- 10.6 小结
- 第11章 动态管理upstream
- 11.1 实战需求分析
- 11.2 ngx_http_dyups_module
- 11.2.1 安装ngx_http_dyups_module
- 11.2.2 动态管理upstream
- 11.2.3 确保upstream数据的完整性
- 11.3 nginx-upsync-module
- 11.3.1 安装nginx-upsync-module和Consul
- 11.3.2 Consul的键值操作
- 11.3.3 动态管理upstream
- 11.3.4 验证动态配置功能
- 11.3.5 高可用、高并发设计
- 11.4 基于balancer_by_lua_block的灵活控制
- 11.5 小结
- 第12章 Nginx日志分析系统
- 12.1 实战需求分析
- 12.2 ngxtop实时分析
- 12.3 Flume方案的日志分析
- 12.4 智能化nginx_log_analysis
- 12.4.1 架构重构
- 12.4.2 日志远程传输
- 12.4.3 时序数据库
- 12.4.4 日志规则设计
- 12.5 lua-resty-logger-socket传输方案
- 12.5.1 安装lua-resty-logger-socket
- 12.5.2 远程传输配置
- 12.5.3 参数解读
- 12.6 时序数据库InfluxDB
- 12.6.1 安装InfluxDB
- 12.6.2 基本概念和操作
- 12.6.3 数据分析之查询函数
- 12.6.4 数据存放之保留策略
- 12.6.5 定时任务之连续查询
- 12.6.6 客户端操作之API
- 12.6.7 使用UDP模式传输数据
- 12.7 利用lua-resty-http实现API交互
- 12.7.1 安装lua-resty-http
- 12.7.2 使用方式
- 12.8 提升InfluxDB性能
- 12.9 小结
- 第13章 静态容灾系统
- 13.1 荆棘之路
- 13.2 设计之路
- 13.3 架构流程图
- 13.3.1 反向代理系统
- 13.3.2 日志分析系统
- 13.3.3 后台系统
- 13.3.4 爬虫系统
- 13.3.5 容灾的缓存系统
- 13.3.6 时间版本的用途
- 13.3.7 异地容灾
- 13.4 核心代码解说
- 13.4.1 Ngx_Lua应用
- 13.4.2 爬虫和日志系统的关系
- 13.4.3 全部容灾和部分容灾功能
- 13.5 静态容灾的智能关闭方案
- 13.5.1 从日志分析系统中复制请求
- 13.5.2 利用goreplay复制流量
- 13.5.3 Nginx的镜像功能
- 13.5.4 灰度验证容灾系统缓存
- 13.6 小结
- 第14章 深入挖掘反向代理
- 14.1 验证码防御中心
- 14.2 鉴权管理中心
- 14.2.1 利用auth_request管理鉴权
- 14.2.2 利用Ngx_Lua子请求实现鉴权功能
- 14.3 并行访问
- 14.3.1 轻线程的启动和终止
- 14.3.2 等待和终止轻线程
- 14.3.3 URL的外部合并和内部并发
- 14.3.4 使用cosocket实现外部访问
- 14.4 小结
- 第15章 爬虫
- 15.1 区分搜索引擎爬虫和恶意爬虫
- 15.2 应对搜索引擎爬虫
- 15.2.1 搜索引擎的User-Agent
- 15.2.2 Robots协议
- 15.2.3 控制搜索引擎爬虫实战
- 15.3 应对恶意爬虫
- 15.3.1 发现恶意爬虫
- 15.3.2 抵御恶意爬虫之禁止访问
- 15.3.3 抵御恶意爬虫之验证码拦截
- 15.4 小插曲——使用假数据迷惑恶意爬虫
- 15.5 小结
- 第16章 性能分析和优化
- 16.1 性能分析场景搭建
- 16.1.1 安装SystemTap
- 16.1.2 LuaJIT的Debug模式
- 16.1.3 开启PCRE的Debug模式
- 16.1.4 分析工具下载
- 16.1.5 找出不支持Debug模式的lib库
- 16.2 流量复制
- 16.3 各项指标分析和优化建议
- 16.3.1 连接池使用状态分析
- 16.3.2 找出读/写频繁的文件
- 16.3.3 执行阶段耗时分析
- 16.3.4 HTTP连接数和文件打开数分析
- 16.3.5 找出CPU“偷窃者”
- 16.3.6 正则表达式耗时分析
- 16.3.7 找出消耗CPU资源较多的指令
- 16.3.8 利用火焰图展示和分析数据
- 16.4 检查全局变量
- 16.5 小结
- 第17章 值得拥有的OpenResty
- 17.1 OPM
- 17.2 使用DNS提升访问效率
- 17.3 TCP和UDP服务
- 17.4 多层级缓存
- 17.5 lua-resty-core扩展
- 17.5.1 字符串分割
- 17.5.2 Nginx进程管理
- 17.6 全局唯一标识符UUID
- 17.7 “全家福”awesome-resty
- 17.8 OpenResty,未来!
- 第18章 开发环境下的常见问题
- 18.1 被截断的响应体
- 18.2 “邪恶”的if
- 18.3 “贪婪”的正则匹配
- 18.4 规范HTTP状态码
- 18.5 规范URL
- 18.6 proxy_set_header的误操作
- 18.7 开发环境下的证书问题
- 18.8 深层次的错误重定向
- 18.9 压测环境下的限速和短连接
- 18.10 小结
- 反侵权盗版声明
- 封底
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。