猜你喜欢
Nginx实战:基于Lua语言的配置、开发与架构详解

Nginx实战:基于Lua语言的配置、开发与架构详解

书籍作者:王力 ISBN:9787121354601
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:9252
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

  《Nginx实战:基于Lua语言的配置、开发与架构详解》主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,充分利用这些角色的各项功能有助于提升服务的整体性能。《Nginx实战:基于Lua语言的配置、开发与架构详解》所介绍的大部分功能是通过Nginx+Lua进行开发和配置的,但并不要求读者精通Lua,在必要的位置本书会对Lua进行选择性讲解。涉及实战的内容会有配套源码,方便读者学习和使用。
  《Nginx实战:基于Lua语言的配置、开发与架构详解》适合广大运维人员和开发人员学习,对使用Nginx完成各种服务架构感兴趣的架构师也可以阅读《Nginx实战:基于Lua语言的配置、开发与架构详解》。阅读本书需要有Nginx初级或中级配置经验。

作者简介

  王力
  折800运维架构师,Nginx开发工程师,具有多年互联网相关项目的开发经验。喜欢使用小众技术完成运维、开发和测试任务,擅长通过架构设计降低开发难度,擅长搭建Nginx高性能服务。
  汤永全
  折800运维主管,具有多年互联网相关项目的运维工作经验。历经传统运维和互联网运维,一步一个脚印,积累了不少运维相关的经验和感悟。活跃于成都运维管理人员的线下组织“运维罗汉堂”。

编辑推荐
适读人群 :本书适合对Lua语言进行Nginx开发的运维和研发人员阅读,本书偏重业务层面,实用性强。

  1.业内专家刘凯、冯浩、屈耀华、杨明翰、彭赫联袂力荐。
  2.本书深入浅出地讲解了Nginx+Lua在实战场景中的各种使用技巧和方法,涉及配置、模块、缓存、日志分析、静态容灾、反向代理、爬虫、性能分析与优化等众多方面,帮助提升服务性能。
  3.所有实战案例都有配套源码,方便读者学习和使用。

前言

  Nginx自2004年发布第一个公开版本以来,就因其稳定性强、配置灵活、占用内存少、反向代理功能强大,而被越来越多的人喜爱和使用。随着人们对Nginx关注度的不断上升,Nginx有了更多的使用场景,但在大多数公司中仍然只是扮演着反向代理的角色。
  笔者在折800电商平台(以下简称折800)工作多年,深感对一个电商平台来说,在成本控制和服务性能之间取得平衡是能够可持续发展的前提之一。与同类型且流量级别相近的公司相比,折800的计算机硬件成本要低很多,这主要得益于公司对软件技术的极致追求。在这样的背景下,我们热衷于研究Nginx反向代理等小众技术,并使用Nginx实现了大量功能,极大地提升了服务的性能和灵活度。
  目前,Nginx在国内的影响力还比较有限,因此很多开发人员并不了解Nginx的魅力,笔者写这本书的目的就是和大家分享Nginx的使用技巧,并一起来推广Nginx。
  市面上已经有一些介绍Nginx技术的书籍,但大多偏向于对Nginx配置和原理的讲解,还有一些书籍是基于C或C++来介绍Nginx模块的。这样的书籍要求读者对Nginx的原理和源码有所了解,甚至还要有深厚的C语言或C++语言的开发功底,这对大多数初学者来说要求太高了。
  怎样才能做到既发挥出Nginx的威力,又尽量降低学习成本呢?笔者选择使用OpenResty的核心组件,因为OpenResty是Nginx+Lua的完美结合,它既能够实现Nginx的异步功能,又兼有Lua的易学优势,这样,在使用Nginx进行开发的过程中就不需要深入了解Nginx的原理了(如果已经掌握了Nginx原理当然更好)。所以,与市面上的大多数同类书籍不同,本书不会过多介绍Nginx配置和原理方面的内容,学习难度较低。
  近几年来,OpenResty的热度不断上升,各大互联网公司纷纷尝试使用Nginx+Lua的开发模式,在反向代理、网关系统、API调度服务中都能看到这种开发模式的“身影”。希望本书可以让更多的开发人员了解Nginx+Lua的魅力,也让更多技术团队能够合理地使用Nginx,降低硬件的投入成本,同时提升服务的性能。
  本书由王力、汤永全编写。全书内容共分18章,其中第1~5章介绍Nginx常见的配置方式,属于Nginx的入门知识;第6~10章对Nginx+Lua核心功能进行解读,是熟悉Nginx+Lua开发模式的必备知识;第11~18章是Nginx+Lua开发模式在实际业务中的实践应用,是灵活运用该模式的具体体现。
  感谢杨明翰、冯浩、刘凯、屈耀华对本书的支持;也感谢折800技术平台,在这里我得到了持续的历练和成长。同时,感谢电子工业出版社博文视点的编辑付睿和崔志伟,他们在本书的语言表述方面给了很多建议。
  本书包含了作者的技术实践,如果你对本书内容有任何建议和疑惑,可以发电子邮件至[email protected]。谢谢!
  王力
  2018年12月

目录

第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

短评

支持,好书,基础。

2019-03-16 18:54:12

书写的很不错,思路很新颖。连续几天读完了,很受启发!赞

2019-01-22 10:02:22

当cookbook用了,刚好 F5公司把nginx给买了,看来nginx开发要火。

2019-01-24 23:57:27

看目录有点意思,看了几章,感觉内容还行,有些思路可以借鉴。

2019-02-25 20:18:34

自己开发网关,是一个大的趋势

2019-03-13 00:30:49

不好,书都快掉页了

2019-03-12 22:42:36

还好多好多的好多话好多电话都不懂不懂打扮的好多好多的并不多

2019-02-11 18:15:05

帮老公下单买的,希望老公能学会新技术……

2019-02-20 11:46:14

刚开始接触nginx lua开发,这本书写的内容很多,希望对我有帮助。

2019-01-25 15:15:50