为什么要使用nginx模块?我个人觉得taobao这个ppt来做说明是最好不过了
从web服务器结构开始说起:
第一个模式(lamp):
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iN5UjM5UTOwATMwMzMwITMwIzLcNDMyEDMy8CXyETNmpWevwVbvN2Xzd2bsJmbj9CXt92YuM3ZvxmYuNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
这个结构中,apache的php模块将所有动态网页都使用php解析,所有逻辑结构都放在php中进行处理。
这个结构也是现在最多web网站的架构lamp(linux+apache+php+mysql)
但是这个结构有其致命的弱点:
1 高并发下性能表现不佳
2 页面主体内容(比如)图片等静态资源访问浪费带宽(当然这个后来大公司都改用cdn来处理)
模式演变:
apache2.4刚刚发布,宣称it’s “as fast, and even faster than nginx”.
第二种模式(lnmp):
nginx是个轻量级的http server,必须借助第三方的fastcgi处理器才可以对php进行解析。现在使用最多的就是nginx+php-fpm+php这个模式了。
这里apache被nginx取代,随之带来的解决优势是:
1 提高并发服务能力
2 可以抵御慢连接攻击
相对于上一个模型,还有其他的优点:
3 静态内容(css,js,pic)等放到cdn上,避免了带宽浪费
4 php对于这些大数据量的数据的处理骤减,减少了php的计算量
但是这个模式最大的问题就在于:php+php-fpm对于nginx本身性能的限制。
好了,现在考虑,为什么一定要使用php呢,nginx是否能完成逻辑呢?
nginx中的模块都是使用c语言编写的。nginx中模块分为handler,filter和upstream三种类型。
第三种模型:
这种模型彻底放弃了php,逻辑不再依赖php脚本了,直接使用nginx的扩展来完成,这就意味着不需要开启n个fastcgi,不需要使用php进行逻辑操作了,高并发的php的限制也消失了。
初次看到这个模型会产生几个问题:
1 nginx如何高效访问mysql数据库呢?
2 要实现越来越多的nginx模块,发现c语言开发效率太低了,是否有其他脚本引擎呢?
这第三种模型是taobao大力推荐和正在使用的:
使用lua脚本(巴西人发明的一种语言,相当高效简易)写nginx扩展
nginx直接连接数据库
将静态资源放到cdn上
保证高并发下的效率的提升