📄 Page
1
(This page has no text content)
📄 Page
2
Nginx应用与运维实战 王小东 著 ISBN:978-7-111-65992-1 本书纸版由机械工业出版社于2020年出版,电子版由 华章分社(北京华章图文信息有限公司,北京奥维博 世图书发行有限公司)全球范围内制作与发行。 版权所有,侵权必究 客服热线:+ 86-10-68995265 客服信箱:service@bbbvip.com 官方网址:www.hzmedia.com.cn 新浪微博 @华章数媒 微信公众号 华章电子书(微信号:hzebook)
📄 Page
3
前言 为什么写这本书 在互联网与我们生活已密不可分的今天,大规 模、高性能的网站架构技术已成为每个互联网技术人 员的必备技能。Nginx作为一款开源的Web服务器软 件,因其具有性能稳定、高并发、低内存耗用、高性 能的处理能力等特点,而被广泛应用到国内外各互联 网厂商的实际生产架构中。由于互联网技术迭代非常 快,云计算、微服务等新技术层出不穷,Nginx也一直 处于活跃开发的状态,并在新版本中增加了很多强大 的功能,与这些新技术紧密集成。同时基于其开源版 本衍生出来的OpenResty和淘宝的Tengine等软件也根 据自身需求提供了优秀的扩展功能,满足了云计算、 微服务等各种技术的应用需求,并在实际生产环境中 得到了广泛应用。
📄 Page
4
作为一款Web服务器软件,Nginx实现了Web服务器 的基本功能,用户通过简单的配置指令就可以快速完 成Web服务器的搭建。它还是网络通信协议处理软件, 支持TCP/UDP、HTTP、HTTP/2、gRPC、FastCGI、 SCGI、uWSGI、WebDAV等协议的处理,并实现了相应通 信协议的请求解析、长连接、代理转发、负载均衡、 会话保持等互联网架构中常见的应用功能。同时,它 还是一款高并发服务软件,其采用的固定数量的多进 程模型、事件驱动处理机制、工作流处理方式及模块 化架构等软件开发设计,已成为高并发服务软件开发 的典范。 Nginx自诞生至今已有十几年时间,虽然相关资料 很多,但国内可获得的资料很多是直接翻译自官方文 档,这些资料让读者只是停留在知其然而不知其所以 然的层面,即便有深入讲解某一功能的资料,也仅能 让读者管中窥豹,而无法全面了解Nginx的功能并在实
📄 Page
5
际工作中熟练应用。市面上的图书或偏重于Nginx服务 器的搭建,或偏重于Nginx的源码解析,同时Nginx的 新版本及云计算、微服务等新技术迭代较快,这就导 致市面上介绍Nginx最新技术实际应用及运维管理的资 料稀少。而Nginx的用户只有理解了Nginx的各项指令 参数的功用,才能熟练对Nginx的各种功能进行灵活组 合,以使其发挥最高的性能,进而在实际工作中解决 各种问题。鉴于以上原因,本书分别从Nginx介绍、应 用实战、运维管理及与Kubernetes和微服务的应用集 成4个部分来介绍Nginx的特点及运维管理实战经验, 力求给从事互联网技术工作的读者带来帮助。 读者对象 本书的目标群体为具有一定Linux基础的互联网行 业运维工程师、系统架构师。因为Nginx可应用于Web
📄 Page
6
服务、负载均衡、微服务等多个方面,所以本书也可 作为开发工程师及软件架构师的日常工作参考书。 本书特色 本书对开源版Nginx自有的配置指令进行了全面介 绍和配置举例,同时力求对涉及的技术术语及其原理 进行阐述,使读者可以深刻理解和掌握Nginx配置指令 的配置方法。Nginx是一款网络通信协议处理软件,涉 及大量网络通信协议的处理方法,对于本书中每个涉 及网络通信协议的配置,笔者都对相关技术特点进行 了介绍,使读者可以结合配置案例掌握Nginx在不同应 用场景下的使用方法。全书所涉及的软件部署均采用 了Docker化的部署方法,不仅充分利用了Docker容器 的便捷部署方式,还满足了目前容器化运维管理工作 的技术需求。
📄 Page
7
Nginx现仍处于活跃开发中,本书基于Nginx最新 版本及官方资料撰写,对Nginx开源版本最新功能进行 了完整介绍,还介绍了Nginx与目前比较流行的 Kubernetes和微服务架构应用的集成。 如何阅读本书 Nginx是一款非常优秀的开源软件,笔者主要基于 自身实际使用Nginx的经验来分享Nginx的应用和运维 方法。本书在逻辑上可分为4个部分,分别为Nginx介 绍、应用实战、运维管理,以及Nginx与Kubernetes、 微服务的应用集成。 第一部分 Nginx介绍(第1~4章) 第1章 Nginx概述 Nginx的第一个版本发布于2004年,经过多年的发 展,逐渐演变出Nginx、Nginx Plus、Tengine、
📄 Page
8
OpenResty这4个被广泛应用的版本。本章分别介绍了 这4个版本各自的特点,并通过对开源Nginx架构的特 点及实现原理的介绍,使读者对Nginx的功能有初步的 了解。 第2章 Nginx编译及部署 Nginx是用C语言开发的,需要通过对源代码进行 编译才能获得可运行的二进制文件。本章介绍了Nginx 开源版本的编译配置参数及Tengine、OpenResty两个 版本的扩展编译配置参数和所集成的模块,同时介绍 了各个开源版本的编译和基于Docker的编译部署方 法。 第3章 Nginx核心配置指令 Nginx的配置是通过在配置文件中调整不同配置指 令的指令值实现的。本章介绍了Nginx配置文件的目录
📄 Page
9
结构及主配置文件nginx.conf的文件结构,并对Nginx 的进程及HTTP核心配置的配置指令进行了介绍和配置 举例。 第4章 Nginx HTTP模块详解 Nginx的HTTP模块配置指令主要负责HTTP请求处理 的配置。本章介绍了Nginx在动态赋值、访问控制、数 据处理这3个方面的配置指令和配置举例。 第二部分 应用实战(第5~8章) 第5章 Nginx Web服务应用实战 Nginx的一个基本功能是作为Web服务器提供HTTP 服务,它支持对静态页面、动态脚本页面、多媒体等 文件的响应和处理。本章通过静态文件服务器、HTTPS 安全服务器、PHP网站搭建、Python网站搭建等实战案 例,介绍了Nginx作为Web服务的应用实战。
📄 Page
10
第6章 Nginx代理服务应用实战 Nginx支持HTTP、TCP、gRPC等多种协议的代理, 通过上述代理功能,后端服务器可实现更灵活安全的 部署。本章通过实战案例介绍了Nginx代理相关配置指 令的使用方法及需要关注的客户端源IP问题的解决方 案。 第7章 Nginx缓存服务应用实战 内容缓存是加速用户访问的常用技术。本章介绍 了Nginx缓存模块的配置指令,并通过客户端缓存、代 理缓存、镜像缓存及Memcached集成等应用场景配置案 例,介绍了Nginx作为缓存服务器的应用实战。 第8章 Nginx负载均衡应用实战 Nginx通过上游模块与代理模块共同实现了对后端 服务器的访问负载功能,Nginx支持HTTP、TCP/UDP、
📄 Page
11
gRPC、FastCGI、uWSGI、SCGI、Memcached等协议的反 向代理。本章详细介绍了Nginx负载均衡相关的配置指 令和官方自带的负载均衡算法及实现原理。 第三部分 运维管理(第9~11章) 第9章 Nginx日志管理 Nginx的日志分为访问日志和错误日志两种。日志 的收集和分析是日常运维工作的重要内容,日志不仅 可以帮助运维工程师排查Nginx的问题及优化Nginx的 性能,还可以通过与ELK集成为其代理的网站应用提供 安全、性能、可用性及运行的PV/UV等方面的数据,通 过对这些数据进行不同维度的分析,可以了解如何提 升网站应用的运维能力。 第10章 Nginx监控配置及管理
📄 Page
12
在Nginx的日常运维管理工作中,Nginx的监控管 理是一项重要的工作,但开源版本Nginx自带的监控数 据采集能力相对较弱。本章介绍了开源Nginx与第三方 模块集成的方法,这些方法增强了Nginx的监控数据采 集能力。本章还介绍了目前流行的监控工具 Prometheus对Nginx服务器的监控、告警方法。另外还 举例介绍了监控工具Zabbix获取Prometheus Exporter 数据,以便在运维管理工作中实现统一化监控管理的 方法。 第11章 Nginx集群负载与配置管理 高业务量的互联网应用架构中,通常都是通过多 组Nginx集群实现后端不同应用服务集群负载均衡的, 本章介绍了基于Keepalived的Nginx集群的多层负载架 构搭建,并举例介绍了通过现有的开源软件Jenkins、
📄 Page
13
GitLab和Ansible组合,快速搭建一套Web化的Nginx集 群配置管理框架的方法。 第四部分 Nginx与Kubernetes、微服务的应用集 成(第12~13章) 第12章 Nginx在Kubernetes中的应用 Kubernetes是Google开源的分布式容器管理系 统,它实现了对容器的部署、网络管理、负载调度、 节点集群和资源的扩缩容等自动化管理功能。在该服 务对外发布的方案中,Nginx以Nginx Ingress组件的 方式为Kubernetes集群的Pod应用提供了访问控制、认 证管理、应用层代理、负载均衡等功能,使 Kubernetes对集群中运行于容器的应用程序具有更灵 活的应用层,以提供对外访问的管理能力。本章介绍 了Kubernetes的相关术语及网络通信机制,读者可通 过相关网络通信机制根据实际需求选择Nginx Ingress
📄 Page
14
的部署方式,并通过本章介绍的配置映射和注解这两 种不同的配置方式实现日常Nginx Ingress的配置管理 工作。 第13章 Nginx在微服务架构中的应用 近几年,微服务架构技术发展迅猛,已成为目前 主流的应用架构技术。在微服务架构中,Nginx也在微 服务网关等微服务的核心组件中发挥着重要的作用。 本章从软件发展历史的角度介绍了对微服务架构的认 识,并举例介绍了基于OpenResty的开源微服务网关软 件Kong作为微服务网关的应用配置方法。 勘误和支持 由于笔者的水平有限,书中难免存在不足或疏漏 之处,在此恳请读者朋友批评和指正。你可以将异议 发布到本书的支持网站http://www.nginxbar.org,笔
📄 Page
15
者将尽量在线上为你提供满意的答复。如果你有更多 的宝贵意见,也欢迎发送邮件至yfc@hzbook.com。非 常感谢你对本书的支持。 致谢 感谢Nginx的作者及其团队,他们提供了一个如此 优秀且应用广泛的开源项目,并使该项目一直处于活 跃开发状态,且不断创新,拥抱新技术,为我们持续 提供日益强大的互联网络通信协议解决方案。 感谢OpenResty的作者章亦春,他将Lua语言以模 块的方式嵌入Nginx中,极大地扩展了Nginx的可编程 性,降低了Nginx功能扩展的难度,给Nginx用户的日 常使用带来了极大的便利。 感谢网络中不吝分享知识的众多朋友,大家分享 的资料补充了笔者个人技术的短板,矫正了笔者诸多
📄 Page
16
细节上的不妥之处,给本书的写作带来了极大的帮 助。 感谢机械工业出版社华章公司的编辑杨福川,感 谢他在笔者创作本书过程中给予的指导和帮助。 感谢在工作和生活中给予笔者帮助的家人及朋 友,是你们的理解和支持让我能够完成本书的写作。 王小东 2020年8月
📄 Page
17
第1章 Nginx概述 Nginx(发音同“engine x”)是一个高性能的反 向代理和Web服务器软件,最初是由俄罗斯人Igor Sysoev开发的。Nginx的第一个版本发布于2004年,其 源代码基于双条款BSD许可证发布,因其系统资源消耗 低、运行稳定且具有高性能的并发处理能力等特性, Nginx在互联网企业中得到广泛应用。Nginx是互联网 上最受欢迎的开源Web服务器之一,它不仅提供了用于 开发和交付的一整套应用技术,还是应用交付领域的 开源领导者。Netcraft公司2019年7月的统计数据表 明,Nginx为全球最繁忙网站中的25.42%提供了服务或 代理,进一步扩大了其在主机域名领域的占有量,新 增5220万个站点,总数达4.4亿个,市场占有率已经超 过Apache 4.89%。得益于近几年云计算和微服务的快
📄 Page
18
速发展,Nginx因在其中发挥了自身优势而得到广泛应 用,且有望在未来占有更多的市场份额。 2019年3月,著名硬件负载均衡厂商F5宣布收购 Nginx,Nginx成为F5的一部分。F5表示,将加强对开 源和Nginx应用平台的投资,致力于Nginx开源技术、 开发人员和社区的发展,更大的投资将为开放源码计 划注入新的活力,会主办更多的开放源码活动,并产 生更多的开放源码内容。
📄 Page
19
1.1 Nginx的不同版本 作为最受欢迎的Web服务器之一,Nginx自2004年 发布以来已经得到很多互联网企业的应用。官方目前 有Nginx开源版和Nginx Plus商业版两个版本,开源版 是目前使用最多的版本,商业版除了包含开源版本的 全部功能外,还提供了一些独有的企业级功能。Nginx 在国内互联网企业中也得到了广泛应用,企业在实际 使用中会根据自身的需求进行相应的扩展和增强。目 前国内流行的Nginx主要有两个开源版本,分别是由淘 宝网技术团队维护的Tengine项目和由章亦春发起的 OpenResty项目。
📄 Page
20
1.1.1 开源版Nginx Nginx开源版一直处于活跃开发状态,由Nginx公 司负责开发与维护。截至本书写作时,Nginx开源版本 已经更新到1.17.2版本。Nginx自推出以来,一直专注 于低资源消耗、高稳定、高性能的并发处理能力,除 了提供Web服务器的功能外,还实现了访问代理、负载 均衡、内容缓存、访问安全及带宽控制等功能。其基 于模块化的代码架构及可与其他开发语言(如Perl、 JavaScript和Lua)有效集成的可编程特性,使其具有 强大的扩展能力。 部署和优化具有高效率、高性能并发请求处理能 力的应用架构是应用架构师一直追求的目标,在应用 架构技术的迭代中,各种分离式思想成为主流,比如 将访问入口和Web服务器分离、将Web服务器和动态脚