开发者学堂课程【Linux 操作系统实战:Nginx 能做什么】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/699/detail/12311
Nginx 能做什么
内容介绍
一、Nginx 简介
二、Nginx 能做什么
一、Nginx 简介
Nginx 是 enginex 的简写,是一款很优秀的开源的高性能 HTTP 和反向代理服务器。
Nginx 的创始人是俄罗斯著名的 it 大神伊戈尔·赛索耶夫,他本来是为俄罗斯访问量第二的站点开发的,第一个公开版本0.1.0发布于2004年10月4日。结果,发布之后就引起了巨大的轰动;Nginx 自创建以来,以他卓越的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名于世。2011年6月1日,Nginx 1.0.4正式发布。
Nginx 是一款轻量级的代理服务器,做为一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性:Nginx 更轻巧,处理的并发数更大(Nginx 的并发性在同类型的服务器中表现很好,中国用户使用 Nginx 的有很多,包括很多互联网大厂如百度、京东、网易、腾讯、淘宝等),对 HTTP 并发连接的高处理能力(单台服务器通常能处理30000到60000个并发请求),单个连接处理占用的内存较小,通常较多用于处理静态页面和用于反向代理服务。
Nginx 和 Apache 都采用模范化的结构设计,在连接高并发的情况下,Nginx 是 Apache 服务不错的替代品:Apache 的下载包很庞大,Nginx 的下载包很小,现在的版本大概只有几兆的大小,安装非常方便,Nginx 在美国是做虚拟主机生意的老板们经常选择的软件平台之一,能够支持高达60,000 个并发连接数的响应。这是他一个无与伦比的优势。
二、Nginx 能做什么?
1.HTTP 代理、反向代理
正向代理有点像 NAT 网络结构,用户通过向”网关”请求访问网站,”网关”服务器负责和外网服务器对接请求访问和返回结果;
而反向代理则是,用代理服务器来接受客户端的网络访问连接请求,然后服务器将请求有策略的转发给网络中实际工作的业务服务器,并将从业务服务器处理的结果,返回给网络上发起连接请求的客户端。
示意图:
最左边是客户端,中间是代理服务器,右边是云端以及 Web 服务器。
- 正向代理的操作:
用户是客户端,通过向网关请求来访问网站,正向代理服务器就会请求网站来访问这些结果,网关服务器负责和外网服务器进行对接请求访问并访问这个结果,最后,网关服务器将外网服务器的请求返回客户端。
也就是说,客户端正向的向代理服务器发出请求,通过云端和 Web 服务器沿途返回来,把请求返回的结果返回来了。
- 反向代理的操作:
用代理服务器接受客户端的访问和链接的请求,然后服务器将请求有策略的发给网络中实际工作的业务服务器,业务服务器返回处理结果,返回给网络上发起请求的客户端。
二者的区别在于,云端和代理服务器的位置不同。
2.负载均衡
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
它利用一些反向代理的功能,加一些算法策略达到我们想要的访问目的。
例:
对于单台服务器,它是有并发能力处理的限制的,如果再部署一台相同的 Web 服务器,处理能力变为原来的两倍,也可以部署更多的服务器来提高并发处理的能力。
根据反向代理的机制,服务器需要通过反向代理服务器来将访问结果返回给客户端的,那么反向代理服务器需要有一个调度的机制来保障所有的请求都能得到及时的响应,调度的机制需要用算法来实现。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行。
负载均衡的策略主要有:轮询,加权轮询,lp hash。
轮询:
假设有三台服务器和三个客户端,第一次访问时,第一个 Web 服务器接受请求;第二次访问时,第二个 Web 服务器接受请求;第三次访问时,第三个 Web 服务器接受请求,以此类推,按次序分配服务。
加权轮询:对接受到的请求做一个加权分配,配置高的服务器承担更多的服务。假设第二台服务器的配置是第一台服务器的两倍,单位时间内,可以让第二台服务器执行两次,第一台服务器执行一次。
所谓 Ip hash 算法,即哈希,是对客户端请求的 ip 进行 hash 散列算法操作,然后根据 hash 结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决 session 不共享的问题。
例:
在访问网站的时候,会涉及到一个专业术语:有状态的服务。
就是说客户端发出了一个请求,要求获取一个验证码,第一台服务器接受了请求,并且生成了一个验证码并发回了客户端,然后验证码的信息就保存在了第一台服务器中;
此时客户端又发出一个请求,要求验证用户输入的验证码的正确性,现在这个请求可能就不是第一台服务器服务了,可能变成第二台服务器服务。
但是第二台服务器的 session 和第一台服务器的 session 不是共享的,也就是说第二台服务器没有保存原来的验证码,所以没有办法对用户输入的验证码进行验证,此时就可以用 Ip hash 算法来解决,它可以让第二个请求依然由第一台服务器处理。
3.Web 缓存
Nginx 从0.7.48版本开始,支持了类似 Squid 的缓存功能。这个缓存是把 URL 及相关组合当作 Key,用 md5编码哈希后保存在硬盘上,所以它可以支持任意 URL 链接,同时也支持404/301/302这样的非200状态码。
虽然目前官方的 NginxWeb 缓存服务只能为指定 URL 或状态码设置过期时间,不支持类似 Squid 的 PURGE 指令,手动清除指定缓存页面,但是,通过一个第三方的 Nginx 模块,可以清除指定 URL 的缓存。
Nginx 的 Web 缓存服务主要由 proxy_cache 相关指令集和 fastcgi_cache 相关指令集构成,前者用于反向代理时对后端内容源服务器进行缓存,后者主要用于对 FastCGI 的动态程序进行缓存。两者的功能基本上一样。