nginx基础

Nginx是什么

1、概念

(1)代理服务器
  一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。应用比如:GoAgent,神器。
  nginx基础_第1张图片
(2)正向代理
  是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
(3)反向代理
  在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。Nginx就是其中的一种反向代理服务器软件。
  总之,通俗些讲,正向代理就好比我们访问Facebook,无法直接访问网址,这时通过,即可实现,软件便是正向代理的典型事例,反向代理就好比我们知道域名,也可以访问,但是域名是如何找到对应的服务器就是反向代理。
(4)nginx
  Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器。也是一个IMAP/POP3/SMTP代理服务器;也就是说,Nginx本身就可以托管网站,进行HTTP服务处理,也可以作为反向代理服务器使用。

2、常见web服务器

  (1) Apache:
  属于重量级web服务器(重量级主要是在软件包的大小上比较大,软件的耦合度大),但是速度、性能不及其他轻量级web服务器,并且消费内存较高。使用传统的select模型,比较稳定的Prefork模式为多进程模式,需要经常派生子进程。所以消耗的cpu等服务器资源比较大。
  (2) Lighttpd:
  轻量级web服务器,cpu占用低,效能好,模块丰富。
  (3) Tomcat:
  运行Servlet和Jsp web的应用软件的容器,静态和高并发处理弱。
  (4)Nginx:
  轻量级,高性能http和反向代理服务器。高并发连接达到2-4万个,内存、cpu等系统资源消耗低。Rewrite重写规则(根据域名,URL的不同将HTTP请求分到不同的后端服务器群组),内置的健康检查功能(Nginx Proxy 后端的某台web服务器宕机也不会影响前端访问),节省带宽(支持GZIP压缩,可以添加浏览器本地缓存的Header头)。
  (5)IIS
  Internet Information Server(Internet信息服务)。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS 7,IIS与Window Server完全集成在一起,因而用户能够利用Windows Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。
  (6)Jboss
  Jboss是RedHat的产品(RedHat于2006年收购了Jboss)。与Tomcat相比,Jboss要专业些。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范,本身不支持JSP/Servlet,需要与Tomcat集成才行。一般我们下载的都是这两个服务器的集成版。与Tomcat一样,Jboss也是开源免费的。Jboss在性能上的表现相对于单个Tomcat要好些。当然并非是绝对的,因为Tomcat做成集群,威力不容忽视。Jboss没有图形界面,也不需要安装,下载后解压,配置好环境变量后即可使用。 
  (7)Weblogic
  WebLogic是BEA的产品,用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。与前面的几种小型Web服务器相比,更具专业性,但安装配置也更为复杂。WebLogic是一个商业的软件,使用是收费的,费用还挺贵的。
  (8)WebSphere
  WebSphere是IBM的产品,是因特网的基础架构软件,也就是我们通常所说的中间件。它使企业能够开发、部署和集成新一代电子商务应用(如B2B的电子交易),并且支持从简单的Web发布到企业级事务处理的商务应用。比WebLogic更专业,当然价格也更贵。一般部署在IBM专业的服务器上。
  (9)Resin
  Resin是CAUCHO公司的产品,它也是一个常用的、支持JSP/Servlet的引擎,速度非常快,不仅在表现在动态内容的处理,还包括静态页面的处理上,Tomcat、Jboss在静态页面上的处理能力明显不足,一般都需要跟Apache进行整合使用。而Resin可以单独使用,当然Resin也可以与Apache,IIS整合使用。

3、应用现状

  Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了多年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。在国内,已经有淘宝、新浪博客、网易新闻、56.com、豆瓣、迅雷在线 等多家网站使用Nginx作为Web服务器或反向代理服务器。
  下图为世界范围内web服务器使用情况:
nginx基础_第2张图片  

4、特点

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 Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
8、节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
9、稳定性高:用于反向代理,宕机的概率微乎其微
10、成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
其他:
1、nginx代理和后端web服务器间无需长连接;
接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后端web服务器的压力
2、发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的
3、网络依赖型低。Nginx对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量
4、支持服务器检测。Nginx能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上

如何使用Nginx

1、Nginx进程模型

nginx基础_第3张图片

2、Nginx如何处理一个请求?

(1)nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址
(2)在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen),然后再fork(一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程 )出多个子进程出来,然后子进程会竞争accept新的连接。
(3)客户端向nginx发起连接,客户端与nginx进行三次握手。
(4)与nginx建立好一个连接后,此时,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建nginx对连接的封装,即ngx_connection_t结构体。
(5)设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。
(6)nginx或客户端来主动关掉连接。
  当然,nginx也是可以作为客户端来请求其它server的数据的(如upstream模块),此时,与其它server创建的连接,也封装在ngx_connection_t中。作为客户端,nginx先获取一个ngx_connection_t结构体,然后创建socket,并设置socket的属性( 比如非阻塞)。然后再通过添加读写事件,调用connect/read/write来调用连接,最后关掉连接,并释放ngx_connection_t。
  

3、典型应用场景

nginx基础_第4张图片

你可能感兴趣的:(**【LINUX】**,Nginx)