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服务器进行网站的发布处理,另外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机制;近期版本支持动态装载和卸载;