1.业内专家刘凯、冯浩、屈耀华、杨明翰、彭赫联袂力荐。
2.本书深入浅出地讲解了Nginx+Lua在实战场景中的各种使用技巧和方法,涉及配置、模块、缓存、日志分析、静态容灾、反向代理、爬虫、性能分析与优化等众多方面,帮助提升服务性能。
3.所有实战案例都有配套源码,方便读者学习和使用。
《Nginx实战:基于Lua语言的配置、开发与架构详解》主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,充分利用这些角色的各项功能有助于提升服务的整体性能。《Nginx实战:基于Lua语言的配置、开发与架构详解》所介绍的大部分功能是通过Nginx+Lua进行开发和配置的,但并不要求读者精通Lua,在必要的位置本书会对Lua进行选择性讲解。涉及实战的内容会有配套源码,方便读者学习和使用。
《Nginx实战:基于Lua语言的配置、开发与架构详解》适合广大运维人员和开发人员学习,对使用Nginx完成各种服务架构感兴趣的架构师也可以阅读《Nginx实战:基于Lua语言的配置、开发与架构详解》。阅读本书需要有Nginx初级或中级配置经验。
第1章Nginx学前必知1
1.1HTTP请求报文1
1.2HTTP响应报文2
1.3安装Nginx2
1.4支持HTTPS4
1.5添加模块4
1.6小结4
第2章基础配置5
2.1Nginx指令和指令块5
2.2Nginx基本配置说明6
2.2.1Main配置6
2.2.2与客户端有关的配置7
2.2.3server块7
2.2.4location块8
2.3include的使用9
2.4常见配置9
2.4.1常见配置注解10
2.4.2常见配置实战技巧11
2.5内置变量13
2.5.1常见内置变量13
2.5.2常见内置变量实战技巧15
2.6小结16
第3章强化基础配置17
3.1牢记Context标识17
3.2获取请求的IP地址18
3.2.1获取用户的真实IP地址18
3.2.2防止IP地址伪造19
3.2.3后端服务器对IP地址的需求19
3.3管理请求的行为20
3.3.1限制IP地址的访问20
3.3.2auth身份验证21
3.3.3利用LDAP服务加强安全22
3.3.4satisfy二选一的访问限制功能23
3.4proxy代理23
3.4.1proxy_pass请求代理规则24
3.4.2减少后端服务器的网络开销24
3.4.3控制请求头和请求体25
3.4.4控制请求和后端服务器的交互时间26
3.5upstream使用手册26
3.5.1代理多台服务器27
3.5.2故障转移28
3.5.3负载均衡29
3.5.4通过hash分片提升缓存命中率29
3.5.5利用长连接提升性能30
3.5.6利用resolver加速内部域名访问31
3.6rewrite使用手册32
3.6.1内部重定向32
3.6.2域名跳转33
3.6.3跳转POST请求34
3.6.4设置变量的值34
3.7限速白名单35
3.8日志36
3.8.1记录自定义变量36
3.8.2日志格式规范36
3.8.3日志存储37
3.9HTTP执行阶段38
3.10小结39
第4章常用模块精解40
4.1定制HTTP头信息40
4.1.1使用ngx_http_headers_module设置响应头40
4.1.2使用headers-more-nginx控制请求头和响应头43
4.2第三方模块set-misc-nginx45
4.2.1设置变量46
4.2.2防止SQL注入46
4.2.3字符串非转义和转义47
4.2.4基于键值的集群分片48
4.2.5base编码48
4.2.6md5编码50
4.2.7生成随机数50
4.2.8本地时间的输出52
4.2.9实战经验52
4.3图片的处理53
4.3.1image_filter图片处理53
4.3.2采用渐进式方式打开JPEG图片55
4.3.3WebP格式56
4.3.4优化图片56
4.3.5实战经验:动态切图58
4.4TCP和UDP代理58
4.4.1代理配置说明58
4.4.2DNS服务的反向代理62
4.4.3MySQL集群代理配置62
4.4.4实战经验63
4.5常用模块介绍63
4.5.1基于访问IP地址跳转到对应城市63
4.5.2修改响应内容65
4.5.3零像素文件的生成及其作用66
4.5.4图片的防盗链67
4.6小结68
第5章缓存系统69
5.1缓存配置说明69
5.2控制缓存有效期71
5.3性能优化72
5.3.1缓存未命中的最佳实践72
5.3.2横向扩展最佳实践75
5.3.3避免硬盘I/O阻塞76
5.3.4集群模式77
5.4高可用方案77
5.5proxy_cache配置模板78
5.6小结81
第6章引入Lua82
6.1为什么要引入Lua82
6.2Lua和LuaJIT83
6.3环境搭建83
6.4Lua的数据类型84
6.5表达式89
6.6变量93
6.7流程控制95
6.8函数98
6.9模块100
6.10Lua常见操作102
6.11引入Lua的插曲104
6.12小结105
第7章Lua-Nginx-Module常用指令106
7.1Nginx和OpenResty106
7.2安装Ngx_Lua107
7.3牢记Context标识108
7.4Helloworld108
7.5避免I/O阻塞109
7.6定义模块搜索路径109
7.7读/写Nginx的内置变量110
7.8控制请求头111
7.9控制响应头113
7.10读取请求体116
7.11输出响应体121
7.12正则表达式124
7.13子请求130
7.14获取Nginx的环境变量135
7.15定时任务138
7.16常用指令142
7.17提升开发和测试效率149
7.18小结156
第8章Ngx_Lua的执行阶段157
8.1init_by_lua_block157
8.2init_worker_by_lua_block160
8.3set_by_lua_block165
8.4rewrite_by_lua_block168
8.5access_by_lua_block169
8.6content_by_lua_block170
8.8header_filter_by_lua_block172
8.9body_filter_by_lua_block173
8.10log_by_lua_block176
8.11Lua和ngx.ssl177
8.12Ngx_Lua执行阶段177
8.13小结180
第9章Nginx与数据库的交互181
9.1安装cjson181
9.2与MySQL交互183
9.3与Redis交互189
9.4与数据库交互的常见问题194
9.5小结198
第10章缓存利器199
10.1worker进程的共享内存200
10.2Lua模块下的共享内存209
10.3当前请求在各执行阶段间的数据共享213
10.4利用共享内存配置动态IP地址认证215
10.5缓存和数据库的交互218
10.6小结228
第11章动态管理upstream229
11.1实战需求分析230
11.2ngx_http_dyups_module230
11.3nginx-upsync-module233
11.4基于balancer_by_lua_block的灵活控制238
11.5小结239
第12章Nginx日志分析系统240
12.1实战需求分析240
12.2ngxtop实时分析241
12.3Flume方案的日志分析243
12.4智能化nginx_log_analysis244
12.5lua-resty-logger-socket传输方案246
12.6时序数据库InfluxDB249
12.7利用lua-resty-http实现API交互254
12.8提升InfluxDB性能255
12.9小结255
第13章静态容灾系统256
13.1荆棘之路257
13.2设计之路259
13.3架构流程图261
13.4核心代码解说264
13.5静态容灾的智能关闭方案267
13.6小结269
第14章深入挖掘反向代理270
14.1验证码防御中心270
14.2鉴权管理中心272
14.3并行访问274
14.4小结281
第15章爬虫282
15.1区分搜索引擎爬虫和恶意爬虫282
15.2应对搜索引擎爬虫284
15.3应对恶意爬虫288
15.4小插曲——使用假数据迷惑恶意爬虫290
15.5小结291
第16章性能分析和优化292
16.1性能分析场景搭建292
16.2流量复制295
16.3各项指标分析和优化建议295
16.4检查全局变量305
16.5小结305
第17章值得拥有的OpenResty306
17.1OPM307
17.2使用DNS提升访问效率309
17.3TCP和UDP服务310
17.4多层级缓存312
17.5lua-resty-core扩展313
17.6字符串分割313
17.7Nginx进程管理313
17.8全局唯一标识符UUID315
17.9“全家福”awesome-resty316
17.10OpenResty,未来!316
第18章开发环境下的常见问题317
18.1被截断的响应体317
18.2“邪恶”的if317
18.3“贪婪”的正则匹配318
18.4规范HTTP状态码319
18.5规范URL319
18.6proxy_set_header的误操作320
18.7开发环境下的证书问题320
18.8深层次的错误重定向323
18.9压测环境下的限速和短连接323
18.10小结323
合抱之木,生于毫末,学习技术也是一个循序渐进的过程。本书有基础知识,也有作者自我沉淀后的独创和感悟,完整地体现了一名开发人员从入门新技术到自成一家的成长历程。通过学习本书,读者可以快速上手Nginx开发,并跟随着作者成长的脚步,逐步成长为一名Nginx高手。
——美团到家交易系统平台高级技术专家刘凯
本书深入浅出地讲解了Nginx+Lua在实战场景中的各种使用技巧,对于想入门Nginx和想提升Nginx开发技术的读者来说,阅读本书都将大有裨益。
——聚美优品基础架构总监冯浩
微服务、CI/CD及Scrum一直以来都是大中型互联网公司的专属,其根本原因在于这些技术都需要较强大的硬件设备的支持,而其中尤为重要的是API网关、CI工具及容器编排调度系统,初创型公司很难同时具备所有满足需求的硬件设备。而本书在API网关方面给出了一个投入较少、实现快速的可行性解决方案,相信从事基础架构运维的读者能够从中获得启发。
——货车帮运维中心负责人屈耀华
本书是作者多年来在Nginx方面技术积累及实践的结晶,读完本书后,相信大家也会和我一样惊讶于Nginx和Lua结合所产生的“化学反应”。本书详细阐述了对Nginx的佳实践,并深入剖析了日志分析和静态容灾系统的实现原理,细致地讲解了性能分析和优化的各种方法。相信本书定能给运维工程师、普通开发人员和架构师带来帮助和启发。
——折800运维总监杨明翰
近几年来,使用Nginx来完成应用服务开发变得越来越热门,其低成本、高效率的开发模式受到业界喜爱,阿里巴巴、京东、又拍云、携程、微博、折800等众多互联网平台对其都有广泛应用。本书作者结合多年的Nginx实战经验,从反向代理、网关系统、Web应用开发等角度对Nginx+Lua进行了详细的介绍,并详细讲解了Nginx在整个业务体系中可以扮演的角色,为充分发挥Nginx的性能进行了有益的探索。
——折800联合创始人彭赫