nginx,why nginx?

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师IgorSysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 

 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 Yandex、Mail.Ru、 VKontakte,以及 Rambler。据 Netcraft 统计,在 2012 年 8 月份,世界上最繁忙的网站中有 11.48%使用 Nginx 作为其服务器或者代理服务器。目前互联网主流公司360、百度、新浪、腾讯、阿里等,目前中国互联网企业 70%以上公司都在使用 nginx 作为自己的 web 服务器。Nginx 特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好。Nginx 由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过配置文件将客户端请求映射到一个 location block(location 是 Nginx配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。

 我们知道了nginx是一个代理服务,那就要问问,代理是什么了。

 代理是什么,代理就是一个中间人,帮你去处理一些请求,你只要找到他就可以了,不用关心他会找谁帮你解决问题,这就是代理。比如有些房东,ta有好多好多房子,他可以找一个中介去帮他出租房子,他不用关心房子租给了谁,每个月只管向中介要房租就可以了。其实代理就是一个中间人中间的转手人,你找他,他帮你。

  正向代理,正向代理可以看作一个跳板,代理访问一些资源,比如有些资源你无法访问,但是代理可以,那么你就可以通过代理去访问。比如客户端无法访问外网,但是代理服务器可以,并且客户端可以访那么客户端就可以通过代理服务器来访问外网,如下图:

image

正向代理的话,对于使用者是有感的,就是使用者是知道代理的存在的,并且需要做一些设置来达到使用代理访问资源的目的。

那反向代理呢?反向代理(ReverseProxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

和正向代理的区别就是,使用者是无感的,使用者去请求资源,其实是向代理请求的,使用者并不知道自己是向代理请求的,在使用者看来,他还是在向服务端请求,其实这里有代理帮他去找资源给他。

作用

①保护网站安全

②通过配置缓存功能加速Web请求

③实现负载均衡

image

nginx常常被用作反向代理服务器。

WhyNginx?

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

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

采用IO多路复用epoll

 io多路复用

 多个描述符的I/O操作都能在一个线程内并发交替的顺序完成,这就叫做I/O多路复用,这里的“复用”指的是复用同一个线程。

select:

image

select是线性遍历维护的fd列表,当发现有活跃的fd会唤醒进程处理。有缺点:1)能够监视文件描述符的数量存在最大限制。1024

   2)线性扫描效率低下

 epoll

当有FD就绪时,采用系统回调函数将fd放入,效率更高。

没有连接数量的限制

轻量级

 功能模块少

 代码模块化

Cpu 亲和

就是把cpu的核心和Nginx工作进程绑定方式,把每个worker进程固定在一个cpu上,减少切换cpu的cachemiss,获取更好的性能。

image

Sendfile

处理静态文件,静态文件可以不经过用户空间,直接通过内核空间响应给nginx,这样效率就得到了提升。

image

直接不经过用户态,直接在内核态实现文件的copy传输

image

关于nginx还远远不止这些,等后面有时间再写一写​。

这里是一个远离软红香土,寻找宁静致远的小空间,欢 迎大家一起交流。分享故事,分享心境。

相识,必然知味;相知,必然知心;相处,必然知情。

我的订阅号

我的服务号

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章