Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。

然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。

Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。

这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。

俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。

然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。

由于:

  • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
  • 高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊~)
  • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
  • 这些优秀的设计带来的是极大的稳定性

Nginx的用途

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;

Nginx可以作为一个HTTP服务器进行网站的发布处理(可以将服务器上的静态文件如HTML、图片通过HTTP协议展现给客户端),另外Nginx可以作为反向代理进行负载均衡的实现。

Nginx的程序架构:

我们可以观察一下正在运行中的 nginx 服务器。

$ ps -aux | grep nginx
root      15406  0.0  0.2  39484  4988 ?        Ss   Oct30   0:00 nginx: master process /usr/local/nginx/nginx
nobody    15410  0.0  0.4  41356  9652 ?        S    Oct30   0:00 nginx: worker process
nobody    15411  0.0  0.3  39688  7436 ?        S    Oct30   0:00 nginx: cache manager process
master:

  一个master进程:负载加载和分析配置文件、管理worker进程、平滑升级

worker:

  一个或多个worker进程处理并响应用户请求

缓存相关的进程:
  • cache loader:载入缓存对象
  • cache manager:管理缓存对象
nginx特性:
  • 异步、事件驱动和非阻塞
  • 并发请求处理:通过epoll/select
  • 文件IO:高级IO sendfile,异步,mmap
  • nginx模块:高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载;

 

 

有关概念:

正向代理

  正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

  典型用途

    为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
    使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

和反向代理不同之处在于,典型的正向代理是一种最终用户知道并主动使用的代理方式。例如Chrome浏览器中安装了switchysharp以后,通过switchysharp方便地进行代理转发服务。而为此用户必须要提前在switchysharp中做好设置才能达到相应的效果。

 

反向代理

  反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

  随着网络技术与计算机的普及与发展,代理服务成为网上应用较多的形式。代理服务是指内部网络对Internet发出连接请求,需要制定代理服务将原本直接传输至Web服务器的HTTP发送至代理服务器中。换句话来说,代理服务就是网络信息的中转站。代理服务器作为浏览器与Web服务器之间的另一类服务器,配备代理服务器,浏览器无需直接至Web服务器获取网页,只需向代理服务器发出所需的请求,由代理服务器传送给访问者所需的浏览器。普通的Web代理服务器仅支持对内部网络的访问请求,反向代理服务与普通的代理方法并不存在明显冲突。如果一个代理服务器可以代理外部网络主机访问内部网络,这类代理服务模式称之为反向代理服务。因此,系统的防火墙中可以同时配备两种方式,反向代理用来服务外部网络访问,从而提供内部网络访问外部网络的能力。将反向代理功能与拒绝外部访问防火墙软件合理结合,从而构建一种既包含内部网络、也能向外部发布Web信息防火墙系统。反向代理功能可以提供全面的连接记录,从而提供预防、捕获信息的能力。
反向代理的工作原理是,代理服务器来接受客户端的网络访问连接请求,然后服务器将请求有策略的转发给网络中实际工作的业务服务器,并将从业务服务器处理的结果,返回给网络上发起连接请求的客户端。