下面大家跟着辛星来认识一下Nginx把,它是一个跨平台的服务器,但是它和传统的服务器不同的是,它不依赖于线程处理请求,它有自己的扩展性更强的驱动(异步)架构,因此它更加适合在高流量的网站。而且它还可以作为一个负载均衡器,它可以在内部直接支持Rails和PHP程序的,而且它也可以作为一个HTTP代理服务器对外进行服务。Nginx使用C语言写成。
我们上一节介绍了LVS,那么两者的区别是什么呢?第一点就是因为lvs的工作方式简单,它只是负责请求的分发,而且工作在网络的第四层,因此其负载能力强,不会产生流量,所以效率相当高。而且由于它工作在第四层,也就导致了它可以基本支持所有的应用。但是它不能完全的判断节点故障。
而Nginx工作在第七层,它主要是对HTTP应用实施分流策略,比如可以根据域名、结构等来操作,但是LVS是无法实现类似的功能的,因此也就决定了Nginx的使用的场合远远多于LVS。而且Nginx对网络的依赖性很小,只要ping的通,就可以实现负载均衡。而且Nginx可以通过判断服务器处理网页的状态码、超时等来检测服务器内部的故障,并且它可以根据返回错误的请求重新发送该请求到另一个节点上。
下面再说使用把,由于Nginx的安装和配置以及测试都很简单,因为它有相应的错误日志进行提示,但是LVS的安装、配置、测试就往往需要花费很长的时间了,因为LVS对网络的依赖性很强,很多时候会因为网络问题导致配置失败。
说了这么多,对于小型网站,也就是每日的PV(page view页面浏览数量)小于100万的网站,Nginx 是基本能搞定的,如果机器较多,那么可以使用DNS轮询。LVS通常适合用于构建大型网站或者提供重要服务且机器较多的时候。
其实Nginx不仅有负载均衡的功能,还可以用它来作为一个缓存软件来使用,不过它在缓存方面就不是那么专业了,下面我们来认识一下Nginx的缓存方式把。
目前Nginx已经支持类似Squid的缓存功能,Nginx缓存是把URL以及相关组合当做Key,然后用MD5编码哈希后把数据文件保存到硬盘上,所以,Nginx支持任意的URL连接,也可以支持404、301、302等非200状态的代码。目前官方的Nginx缓存服务只能Wie指定的URL或者状态码设置过期时间,并不支持Squid的PURGE命令来手动清楚指定的缓存页面,我们可以使用第三方的Nginx模块来清除指定的URL缓存。
Nginx的缓存服务功能主要有proxy_cache相关的命令集和fastcgi_cache相关的命令集组成,前者用于反向代理,对后端的源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。最新版的Nginx已经比较完善了,再加上第三方模块,就完全可以取代Squid了。而且功能上,Nginx已经具备缓存加速、清除指定URL缓存的功能,在性能上,Nginx对多核CPU的利用率比其他的开源软件也要好很多。
Squid是应用较早的开源软件,具有传统代理、文件缓存等该功能,不过设置比较复杂,Squid仍然是当今互联网上应用最多的缓存服务器,大多工作在cdn上。而Varnish是一个新兴的软件,设计简单,更加适合当今互联网的应用,很多公司采用了这个软件,Varnish是基于内存的缓存,效率比基于硬盘的存储高一些。而Nginx的缓存是由一个模块来实现的,这个模块还在不断的完善中。在网站架构中,Nginx一般用作反向代理,也就是静态文件使用Nginx会提高不少效率。
Nginx还是一个优秀的HTTP服务器,那么对于它的使用和配置,我们这里就不多说了,我放到我的教程里去写,给大家一个全面的解读。
总结:Nginx不仅仅是一个HTTP服务器,它还同时拥有负载均衡的作用,还可以用作反向代理服务器,这也使得它受到了更多人的青睐。