安装和使用
1.1 nginx是什么
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个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网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构
1.2 c10k
什么是 10K 问题?
在 1999 年,Dan Kegel 向网络服务器提出了一个骇人听闻的难题:
是时候让网络服务器去同时应对 10000 个客户端了,你觉得呢?毕竟网络已经变得很普及了。
这就是著名的 C10K 问题。 通过改善操作系统内核和从像 Apache 那样的线程服务器迁移到像 Nginx, Node 这样的事件驱动服务器,工程师们解决了这个 C10K 问题。
但现在我们面临着一个更大的挑战,如果同时应对一千万个连接呢?要解决这个难题,需要些更变革的技术
那么需要怎样才可以令一个系统管理员就可以管理一千万台服务器呢?
谁会知道?当然是谷歌公司了。
James Hamilon说,计算服务器的数量是困难的,微软说,他们有一百万台服务器,然后,谷歌的服务器预计会达到一千万台,所以我们离单个系统管理员管理千万台服务器的日子还有些远;
但是,当这种情况发生时,下面所列就是这些系统的基础:
把数据中心当成单独一台计算机那样对待
然后,在数据中心内部,在计算机群上部署可复用的多维度多重作业,以便提高机器利用率和节约金钱
但这仅仅是一个数据中心,这并不是把你从 十 带到 百万 台服务器。对于千万台的服务器,你必须利用好这些数据中心,所以,你要建一个 Spanner 那样的可以管理百万台机器、几百个数据中心和数万亿个数据项的系统;
当然,你还需要建造一个巨型网络系统,把这些数据中心连接在一起;
最后,当你真的面临一个系统管理员管理千万台的服务器,你很可能需要付出巨大的精力去做深入的挖掘,使得之前的工作变得有意义。
在高层面来说,单个服务器同时应对千万个连接和单个系统管理员同时管理千万台机器是一样的:可扩展性就是一切。
但在低层面,他们是完全不一样的。处理千万个连接是关于扁平化处理数据,减少层面,单独自己的事情;而管理千万台服务器是关于把智能灌输到更加智慧的层面;这就很像人类身体内部万亿个个体通过自己的小系统共同协作,然后被平衡化和去中心化的大脑所处理。
1.3 nginx的特点
跨平台:可以在大多数Unix like 系统编译运行。而且也有Windows的移植版本。
配置异常简单:非常的简单,易上手。
非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能支持5万并发连接,实际生产中能跑2~3万并发连接数(得益于Nginx采用了最新的epoll事件处理模型(消息队列)。
Nginx代理和后端Web服务器间无需长连接;
Nginx接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送到后端Web服务器,极大减轻后端Web服务器的压力。
发送响应报文时,是边接收来自后端Web服务器的数据,边发送给客户端。
网络依赖性低,理论上只要能够ping通就可以实施负载均衡,而且可以有效区分内网、外网流量。
支持内置服务器检测。Nginx能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。
采用Master/worker多进程工作模式
内存消耗小、成本低廉(比F5硬件负载均衡器廉价太多)、节省带宽、稳定性高等特点。
1.4 nginx基本功能
Nginx的功能包括基本HTTP功能和扩展功能。和Apache服务器一样,Nginx服务器为了提供更多的功能并且能够有效地扩展这些功能。每一个模块都提供了一个功能,通过编译这些功能模块来实现功能的扩展
a)提供静态文件和index文件,处理静态文件,索引文件以及自动索引,打开文件描述符缓存;
b)使用缓存加速反向代理,反向代理加速(无缓存),简单的负载均衡和容错;
c)使用缓存机制加速远程FastCGI,简单的负载均衡和容错;
d)模块化的结构。过滤器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;
e)支持SSL 和 TLS SNI 支持;
f)IMAP/POP3代理服务功能;
g)使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端;
h)使用外部 HTTP 认证服务器认证用户后连接重定向到内部的 SMTP 后端;
a)基于名称和基于IP的虚拟服务器;
b)支持Keep-alive和管道连接;
c)灵活的配置和重新配置、在线升级的时候不用中断客户访问的处理;
d)访问日志的格式,缓存日志写入和快速日志轮循;
e)3xx-5xx错误代码重定向;
f)速度限制
下图是Nginx的内部进程模型:
1.5 正向代理和反向代理
代理服务器一般指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。例如:GoAgent翻墙软件。我们的客户端在进行翻墙操作的时候,我们使用的正是正向代理,通过正向代理的方式,在我们的客户端运行一个软件,将我们的HTTP请求转发到其他不同的服务器端,实现请求的分发
反向代理服务器作用在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务器进行处理,然后再将服务器的相应结果反馈给客户端。Nginx就是一个反向代理服务器软件