Ngnix相关
1 Ngnix的基本概念
(1) Ngnix是什么,做什么事情。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。、
有报告表明 ngnix可以支持5万个并发连接数
Ngnix的特点:
[1] 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。
[2] 配置异常简单,非常容易上手。配置风格跟程序开发一样,神一般的配置
[3] 非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)
[4] 事件驱动:通信机制采用epoll模型,支持更大的并发连接。
[5] master/worker结构:一个master进程,生成一个或多个worker进程
[6] 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)
[7] 成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
[8] 内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
[9] 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
[10] 稳定性高:用于反向代理,宕机的概率微乎其微
Ngnix的原理:
Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。Master接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。
worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换。
使用多进程模式,不仅能提高并发率,而且进程之间相互独立,一个 worker 进程挂了不会影响到其他 worker 进程。
(2) Ngnix特性一:反向代理
代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
概念:
【1】正向代理(针对的是客户端,例如浏览器):正向代理类似一个跳板机,代理访问外部资源
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
【2】反向代理(针对的是服务器端):是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
(3) Ngnix特性二:负载均衡
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡的种类:
1)一种是通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的
2)一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略.
负载均衡的策略
【1】轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
【2】指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
【3】IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。把ip地址换算成hash值,然后对服务器总数取模,(求余),余数是多少,就落到哪一台服务器
【4】fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
【5】url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
(4) Ngnix特性三:动静分离
静态资源: 当用户多次访问这个资源,资源不会改变。
动态资源:当用户多次访问这个资源,资源可能会改变。
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
动静分离简单的概括是:动态文件与静态文件的分离。