squid,nginx,apache几个代理软件的比较(转)
缓存方面:squid,apache都支持diskcache和memcache,根据http的head头来确定是否缓存,nginx不支持缓存,不过我在google开源上看见了新浪的水杨老大的一个东东,给nginx加上了文件缓存,不过没有大规模使用,暂时不把它当做一种解决方案。
在代理和缓存的规则上,apache很强,很强大的重写功能,尤其是强制修改http规则,不过这个功能我始终没有调试成功,no-cache的页面始终无法去缓存。
如果只是做网站的反向代理,负载均衡,nginx感觉要比squid强,性能强悍,配置方便。
如果是做代理+缓存加速,那squid的功能和稳定性还是很好的,毕竟在互联网上大量应用。
apache呢?好像没它的事情了。当然不是,有些地方可以拿他的功能当中间件使用,这个等下次分解。
nginx是一个小巧而高效的Linux下的web服务器软件。Nginx发音为[engine x],是由俄罗斯人Igor Sysoev建立的项目,基于BSD许可。nginx其实已经在一些俄罗斯的大型网站上运行多年,相当的稳定,最近才在美国开始知名起来。
而另外一个热门的web服务器软件是Lighttpd,因为运行在Youtube的后台,所以知名度很高。Lighttpd特色在于它能做Flash streaming和对fastcgi的支持,这样对于Ruby on Rails之类的程序提速不少,比起Apache要好很多。但是 nginx 要比 Lighttpd 更稳定,功能上并不弱于Lighttpd,差不多什么都有,而且比Lighttpd对于URL rewrite的支持更完善一点。
但是不管是 nginx 还是 lighttpd, 对于用来提供静态文件都要比Apache好很多很多,主要就是占用的内存小,Apache和这两个小巧的服务器软件来比实在是个庞然大物啊。
即使是大部分内容动态生成的网站,仍免不了会有一些静态元素,比如图片、JS脚本、CSS等等,所以如果将Squid放在Apache或者Lighttp前端后,反而会使性能下降,毕竟处理HTTP请求是Web服务器的强项。而且已经存在于但内存或者文件系统中的静态内容再在Squid中缓存一下,即浪费内存又浪费了硬盘空间。 因此可以考虑将Lighttpd或者nginx再放在Squid的前面,构成 Lighttpd或者nginx+Squid+Apache的一条处理链,Lighttpd或者nginx在最前面,专门用来处理静态内容的请求,把动态内容请求通过proxy模块转 发给Squid,如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd或者nginx。新请求或者过期的页面请求交由Apache中Web程序来处 理。经过Lighttpd或者nginx和Squid的两级过滤,Apache需要处理的请求将大大减少,减少了Web应用程序的压力。同时这样的构架,便于把不同的处理分散到多台计算机上进行,由Lighttpd或者nginx在前面统一把关。
所以,合理的把lighttpd,nginx,apache及Squid结合起来使用,达到的效果是单独使用其中的一项所远远不能及的,把他们组合成一个整体,才能达到最佳的负载能力!