nginx诞生记
牛人与普通人的区别在于:前者遇到不爽的事,二话不说,自己动手解决;普通人要么骂骂咧咧,要么置于不理,眼不见为净。当然,这并没有什么不好,这个世界就是需要普通人占据绝大多数,才能衬托出牛人的伟大。
伊戈尔·赛索耶夫就是一个牛人(战斗民族的名字,不是什么夫,就是什么斯基),当年他在rambler.ru
这个号称战斗民族访问量第二大的网站工作时,为了提升网站的访问速度,就自己写了一个高性能的web服务器,从此,这个名为nginx
的web服务器就成为万千程序员的利器。
在nginx的众多追捧者中,淘宝是其死忠粉,在此基础上开发了Tengine
nginx的特性
- 模块化设计
模块化意味着有较好的扩展性
- 高可靠
工作原理是:由master主进程负责解析配置文件以及生成worker子进程; worker进程有不同的种类,职责各有不相同,有些负责响应请求, 有些负责缓存等
- 低内存消耗
一个线程可响应多个请求,据说10000个keep-alive(保持连接)下的connection, 仅需要2.5MB的内存。
虽然还不太明白,但看起来就觉得很厉害的样子
- 支持热部署
能够在不停机的前提下更新配置文件、日志文件滚动、升级程序版本。可以类比为在空中给飞机进行加油
nginx基本功能
- 静态资源的web服务器,能缓存打开的文件描述符
这是nginx最基本的功能
- 作为http smtp pop3这三种协议的反向代理服务器
反向代理可以简单地类比为中间人。中间人可以有多个层级。如:你要买西兰花,不需要去菜地跟农民交易,只需要去市场找菜贩买菜,而菜贩可能是跟蔬菜批发商拿货的,批发商才是直接与菜农交易
在这整个过程中,你是发起请求的客户端,菜农是最终提供服务的服务器,但你们并不需要见面,甚至不需要知道对方的存在,只需要与你们的上下游对接即可。中间商就是反向代理服务器,起到的是接收请求--转发请求--接收响应--发送响应的作用。
- 支持缓存和负载均衡机制
nginx可以接受很多个请求,但请求的处理需要多台服务器
场景类比:1个服务员可以接待100个人,但厨师一人只能做20人的菜,那就需要加5个厨师。服务员就是反向代理器,厨师就是服务器,反向代理负责接收并分发请求,服务器提供数据,请求过大时只需要新增服务器即可
image-
支持FastCGI(fpm, lnmp),uWSGI(python)
-
模块化、过滤器、ssi、图像的大小调整
nginx扩展功能
-
基于名称和IP的虚拟主机
-
支持keepalive
-
支持平滑升级
-
定制访问日志, 支持使用日志缓冲区提供日志存储性能
-
支持 url rewrite
-
支持路径别名
-
支持基于ip及用户的访问控制
-
支持速率限制、支持并发数限制