Nginx的简介

Nginx

  • Nginx基础
    • Nginx简介
    • Nginx的发展趋势
    • Nginx的优势
    • Nginx的缺点

Nginx基础

Nginx简介

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强
Ngin解决C10k的问题,c10k用来命名并发处理10k连接的问题
Nginx可以用做正向代理和反向代理,也可作为负载均衡使用

Nginx的发展趋势

由以下图片可以看出Nginx的全球使用频率在逐步上升
Nginx的简介_第1张图片

Nginx的优势

1.高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应
2.内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所有它是轻量级的
3.简单稳定:配置简单,基本在一个conf文件中配置,性能比较稳定,可以7*24小时长时间不间断运行
4.模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。
5.支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。
6.低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的,如果使用F5等硬件来做负载均衡,硬件成本比较高。
7.支持多系统:Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows,由于Nginx是免费开源的,可以在各系统上编译并使用。
8.可以做正向代理与反向代理
正向代理与反向代理的区别

正向代理

位于客户端与原始服务器之间的代理服务器,为了从原始服务器获得请求,客户端向代理发出请求,随后向真实服务器发出请求

简单一点: A向C借钱,由于一些情况不能直接向C借钱,于是A找B,B向C借钱,于是A得到了钱。
但是C并不知道A的存在。B就充当了A的代理人的角色。总结来说:正向代理隐藏了客户端client
Nginx的简介_第2张图片
反向代理:

客户端去访问服务器时,并不知道访问那一台,就像是客户端访问代理服务器一样,实际上是当代理服务器拿到客户端请求后转发到真实服务器中的任意一台(或根据匹配规则来),在用户看来,客户端只是访问了代理服务器,典型的例子就是负载均衡,总结来说:反向代理隐藏了后端服务器server

A向B借钱,B没有拿自己钱,而是悄悄的向C去借钱,然后再交给A,A以为是B得钱,但不知道C的存在。
Nginx的简介_第3张图片
Nginx的简介_第4张图片
9.IO多路复用
理论方法
       第一种方法
              最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)
       第二种方法
              I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。)发明它的原因,是尽量多的提高服务器的吞吐能力,在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流
技术类型
       select
              select是第一个实现 (1983 左右在BSD里面实现的)。
              select 被实现以后,很快就暴露出了很多问题。
              select 会修改传入的参数数组,这个对于一个需要调用很多次的函数,是非常不友好的。
              select 如果任何一个sock(I/O stream)出现了数据,select 仅仅会返回,但是并不会告诉你是那个sock上有数
据,于是你只能自己一个一个的找,10几个sock可能还好,要是几万的sock每次都找一遍…
              select 只能监视1024个链接。
              select 不是线程安全的,如果你把一个sock加入到select, 然后突然另外一个线程发现,这个sock不用,要收
回,这个select 不支持的,如果你丧心病狂的竟然关掉这个sock, select的标准行为是不可预测

       poll

              于是14年以后(1997年)一帮人又实现了poll, poll 修复了select的很多问题,比如
              poll 去掉了1024个链接的限制,于是要多少链接呢, 主人你开心就好。
              poll 从设计上来说,不再修改传入数组,不过这个要看你的平台了,所以行走江湖,还是小心为妙。
              其实拖14年那么久也不是效率问题, 而是那个时代的硬件实在太弱,一台服务器处理1千多个链接简直就是神一样的存在了,select很长段时间已经满足需求。
              但是poll仍然不是线程安全的, 这就意味着,不管服务器有多强悍,你也只能在一个线程里面处理一组I/O流。你当然可以那多进程来配合了,不过然后你就有了多进程的各种问题。
       epoll于是5年以后, 在2002, 大神 Davide Libenzi 实现了epoll.
              epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了poll 和select绝大部分问题, 比如:
              epoll 现在是线程安全的。
              epoll 现在不仅告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找了。
              特点
              异步,非阻塞
$ pstree |grep nginx
|-+= 81666 root nginx: master process nginx
| |— 82500 nobody nginx: worker process
| — 82501 nobody nginx: worker process
1个master进程,2个work进程
              每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调。
       理解
              同步阻塞:老师每次解决一个问题之后才能解决下一个问题,而且一次性只能解决一个问题
              异步不阻塞:老师每次收集多个问题,然后解决并给出结果

Nginx的缺点

1.动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求
2.rewrite弱:虽然nginx支持rewrite功能,但是相比于Apache来说,Apache比nginx 的rewrite 强大。

Apache与Nginx的优缺点比较

1、nginx相对于apache的优点:

轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊

apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的都可以找到
bug少 ,nginx 的bug 相对较多

2、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在连接高并发的情况下,Nginx是不错的选择,能够支持高达 50,000 个并发连接数的响应。

Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务

Nginx 是一个安装非常的简单 , 配置文件非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 .

3、Nginx 配置简洁, Apache 复杂
Nginx 静态处理性能比 Apache 高 3倍以上
Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用
Apache 的组件比 Nginx 多
现在 Nginx 才是 Web 服务器的首选

4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

5、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式.

Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的

Web服务器运行。Apache是Web服务器而Tomcat是Java应用服务器。

Apache服务器 只处理 静态HTML,tomcat服务器 静态HTML 动态 JSP Servlet 都能处理

你可能感兴趣的:(Nginx)