我们之前大量使用Apache来作为HTTPServer。 Apache具有很优秀的性能,而且通过模块可以提供各种丰富的功能。
优点:
缺点:
解决方法:
举例,对于10,000的并发连接请求,nginx可能仅仅使用几M的内存;而Apache可能需要使用几百M的内存资源。
1)关于单一使用Apache来作为HTTPServer的情况我们不用再多做介绍,非常常见的应用;
上面我们介绍到Apache对于PHP等服务器端脚本的支持是通过自己的模块来实现的,而且性能优越。
2)我们同样可以单单使用 nginx或者lighttpd来作为HTTPServer来使用。
nginx和lighttpd和Apache类似都通过各种模块可以对服务器的功能进行丰富的扩展,同样都是通过conf配置文件对各种选项进行配置。
对于PHP等,nginx和lighttpd都没有内置的 模块来对PHP进行支持,而是通过FastCGI来支持的。
Lighttpd 通过模块可以提供CGI, FastCGI和SCGI等服务,nginx则没有自己提供处理PHP的功能,需要通过第三方的模块来提供对PHP进行FastCGI方式的集成。
Lighttpd vs nginx :http://www.wikivs.com/wiki/Lighttpd_vs_nginx
1) 代理服务器的概念proxy server:
代理服务器 的概念很容易理解,就是通常作为两台机器中间的机器,需要提供的功能往往有:
所谓的负载均衡就是,很多机器使用一个代理的时候,代理服务器需要对各个服务器进行均衡。
我们常见的代理是正向的代理,例如我们机房有20台电脑要上网,现在只有一个电脑可以上网,那么可以使用这台电脑作为代理服务器,所有通过网络的数据传输 都要经过该代理服务器。
而反向代理,是和正向代理相反的 ,正向代理针对服务接收方用户来说,反向代理或者叫做服务器端代理是针对服务器端的,意思是有多台服务器,反向代理服务器对用户的请求代理发送给其中的一 台服务器进行处理。
Proxy server :http://en.wikipedia.org/wiki/Proxy_server
2) 实际中对于一个大型网站,我们通常使用很多台sever来构成一个cluster来对用户的各种请求进行响应。因此通常需要一台或者多台反向代理服务器来对多台Server进行服务。
这个反向代理服务器需要提供的功能一般都包括:
Reverse proxy :http://en.wikipedia.org/wiki/Reverse_proxy
(需要注意反向代理服务器和防火墙优点类似,但是防火墙一般只有安全方面的考虑,没有缓存和负载均衡方面的功能。)
3) 综上,实际中Web服务器端的架构
通常是多台Web服务器运行并行地提 供服务;
同时还需要在Web服务器前段部署一台或者多台反向代理服务器,一方面缓存一些静态数据,或者将Web服务器动态产生的一些内容缓存,另一方面通过负载均衡功能,可以均匀地将用户的并发请求传递给多台Web服务器进行处理。
这样一方面可以大大降低后面每台Web服务器的负担;另一方 面可以实现多台服务器的负载均衡。
nginx或lighttpd在前端作为反向代理服务器,后台布置多台ApacheHTTPServer:
因此我们通常可以把他们作为反向代理服务器放置到多台的Apache Web服务器前段,来一方面缓存数据,另一方面实现多台服务器的负载均衡。
因此如果从图形来分析的话,nginx作为最前端的web cache系统,通常的架构如下:
这个结构的优点:
nginx和squid配合搭建的web服务器前端系统架构:
前端的lvs和squid,按照安装方法,把epoll打开,配置文件照搬,基本上问题不多。
这个架构和app_squid架构的区别,也是关键点就是:加入了一级中层代理,中层代理的好处实在太多了:
参考资料:
http://hudeyong926.javaeye.com/blog/813141
nginx作为最前端的web cache系统:http://sudone.com/archie/app-nginx-squid-nginx.html
nginx和squid配合搭建的web服务器前端系统:http://sudone.com/archie/app_nginx_squid.html
General Architecture of LVS Clusters:http://www.linuxvirtualserver.org/architecture.html
http://sjolzy.cn/WEB-server-Apache-Nnginx-Lighttpd-comparison-and-selection-of-the-best.html