本书主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,充分利用这些角色的各项功能有助于提升服务的整体性能。本书所介绍的大部分功能是通过Nginx+Lua进行开发和配置的,但并不要求读者精通Lua,在必要的位置本书会对Lua进行选择性讲解。涉及实战的内容会有配套源码,方便读者学习和使用。
本书适合广大运维人员和开发人员学习,对使用Nginx完成各种服务架构感兴趣的架构师也可以阅读本书。阅读本书需要有Nginx初级或中级配置经验。
本书深入浅出地讲解了Nginx+Lua在实战场景中的各种使用技巧和方法,涉及配置、模块、缓存、日志分析、静态容灾、反向代理、爬虫、性能分析与优化等众多方面,帮助提升服务性能。
·王力·
折800运维架构师,Nginx开发工程师,具有多年互联网相关项目的开发经验。喜欢使用小众技术完成运维、开发和测试任务,擅长通过架构设计降低开发难度,擅长搭建Nginx高性能服务。
·汤永全·
折800运维主管,具有多年互联网相关项目的运维工作经验。历经传统运维和互联网运维,一步一个脚印,积累了不少运维相关的经验和感悟。活跃于成都运维管理人员的线下组织“运维罗汉堂”。
前 言
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技术平台,在这里我得到了持续的历练和成长。同时,感谢电子工业出版社博文视点的编辑付睿和崔志伟,他们在本书的语言表述方面给了很多建议。
本书包含了作者的技术实践,如果你对本书内容有任何建议和疑惑,可以发电子邮件至leehomewl@gmail.com。谢谢!
王力
2018年12月
在gzip_on上一行的client_header_buffer_size 32K; #对文件上传大小的限制。此处的client_header_buffer已经在网上数4行的内容中出现,并且和注释内容不一致。
第5行的upstream backend{}内容下的server,很明显是需要放在{}中的。
发现拼写错误一例:
原文:Nginx在1.9.0版本之后加入了 ngx_stream_proxy_modulea 。此处应为 ngx_stream_proxy_module,多了一个a
7.17 小节中,”注意”部分: 把 lua_cade_cache 设置为 on 只适合在开发环境中使用
此处 on 应为 off 。off 即关闭缓存,只适合在开发环境中使用。