仓酷云

标题: 给大家带来nginx 作为反向代办署理完成负载平衡的例子 [打印本页]

作者: 爱飞    时间: 2015-1-16 11:55
标题: 给大家带来nginx 作为反向代办署理完成负载平衡的例子
经常看到有人问用什么版本的linux好,其实只要你认真学习无论什么版本都挺好的。
nginx这个轻量级、高功能的webserver次要能够干两件事变:

〉间接作为httpserver(取代apache,对PHP必要FastCGI处置器撑持);
〉别的一个功效就是作为反向代办署理服务器完成负载平衡

以下我们就来举例申明怎样利用nginx完成负载平衡。由于nginx在处置并发方面的上风,如今这个使用十分罕见。固然了Apache的mod_proxy和mod_cache分离利用也能够完成对多台appserver的反向代办署理和负载平衡,可是在并发处置方面apache仍是没有nginx善于。

1)情况:

a.我们当地是Windows体系,然后利用VirutalBox安装一个假造的Linux体系。
在当地的Windows体系上分离安装nginx(侦听8080端口)和apache(侦听80端口)。在假造的Linux体系上安装apache(侦听80端口)。
如许我们相称于具有了1台nginx在前端作为反向代办署理服务器;前面有2台apache作为使用程序服务器(能够看做是小型的servercluster。;-));

b.nginx用来作为反向代办署理服务器,安排到两台apache之前,作为用户会见的出口;
nginx仅仅处置静态页面,静态的页面(php哀求)一切都托付给背景的两台apache来处置。
也就是说,能够把我们网站的静态页面大概文件安排到nginx的目次下;静态的页面和数据库会见都保存到背景的apache服务器上。

c.以下先容两种办法完成servercluster的负载平衡。
我们假定前端nginx(为127.0.0.1:80)仅仅包括一个静态页面index.html;
背景的两个apache服务器(分离为localhost:80和158.37.70.143:80),一台根目次安排phpMyAdmin文件夹和test.php(内里测试代码为print“server1“;),另外一台根目次仅仅安排一个test.php(内里测试代码为print“server2“;)。

2)针对分歧哀求的负载平衡:

a.在最复杂地构建反向代办署理的时分(nginx仅仅处置静态不处置静态内容,静态内容交给背景的apacheserver来处置),我们详细的设置为:在nginx.conf中修正:
.代码以下:

location~.php${
proxy_pass158.37.70.143:80;
}


〉如许当客户端会见localhost:8080/index.html的时分,前真个nginx会主动举行呼应;
〉当用户会见localhost:8080/test.php的时分(这个时分nginx目次下基本就没有该文件),可是经由过程下面的设置location~.php$(暗示正则表达式婚配以.php开头的文件,概况参看location是怎样界说和婚配的http://wiki.nginx.org/NginxHttpCoreModule),nginx服务器会主动pass给158.37.70.143的apache服务器了。该服务器下的test.php就会被主动剖析,然后将html的了局页面前往给nginx,然后nginx举行显现(假如nginx利用memcached模块大概squid还能够撑持缓存),输入了局为打印server2。

如上是最为复杂的利用nginx做为反向代办署理服务器的例子;

b.我们如今对如上例子举行扩大,使其撑持如上的两台服务器。
我们设置nginx.conf的server模块部分,将对应部分修正为:
.代码以下:

location^~/phpMyAdmin/{
proxy_pass127.0.0.1:80;
}
location~.php${
proxy_pass158.37.70.143:80;
}


下面第一个部分location^~/phpMyAdmin/,暗示不利用正则表达式婚配(^~),而是间接婚配,也就是假如客户端会见的URL是以http://localhost:8080/phpMyAdmin/开首的话(当地的nginx目次下基本没有phpMyAdmin目次),nginx会主动pass到127.0.0.1:80的Apache服务器,该服务器对phpMyAdmin目次下的页面举行剖析,然后将了局发送给nginx,后者显现;
假如客户端会见URL是http://localhost/test.php的话,则会被pass到158.37.70.143:80的apache举行处置。

因而综上,我们完成了针对分歧哀求的负载平衡。
〉假如用户会见静态页面index.html,最前真个nginx间接举行呼应;
〉假如用户会见test.php页面的话,158.37.70.143:80的Apache举行呼应;
〉假如用户会见目次phpMyAdmin下的页面的话,127.0.0.1:80的Apache举行呼应;

3)会见统一页面的负载平衡:
即用户会见http://localhost:8080/test.php这个统一页面的时分,我们完成两台服务器的负载平衡(实践情形中,这两个服务器上的数据请求同步分歧,这里我们分离界说了打印server1和server2是为了举行识别区分)。

a.如今我们的情形是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127.0.0.1:80(包括test.php页面可是打印server1),另外一台是假造机的158.37.70.143:80(包括test.php页面可是打印server2)。

b.因而从头设置nginx.conf为:
〉起首在nginx的设置文件nginx.conf的http模块中增加,服务器集群servercluster(我们这里是两台)的界说:
.代码以下:

upstreammyCluster{
server127.0.0.1:80;
server158.37.70.143:80;
}


暗示这个servercluster包括2台服务器
〉然后在server模块中界说,负载平衡:
.代码以下:

location~.php${
proxy_passhttp://myCluster;#这里的名字和下面的cluster的名字不异
proxy_redirectoff;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
}


如许的话,假如会见http://localhost:8080/test.php页面的话,nginx目次下基本没有该文件,可是它会主动将其pass到myCluster界说的服务区机群中,分离由127.0.0.1:80;大概158.37.70.143:80;来做处置。
下面在界说upstream的时分每一个server以后没有界说权重,暗示二者平衡;假如但愿某个更多呼应的话比方:
.代码以下:

upstreammyCluster{
server127.0.0.1:80weight=5;
server158.37.70.143:80;
}


如许暗示5/6的概率会见第一个server,1/6会见第二个。别的还能够界说max_fails和fail_timeout等参数。
http://wiki.nginx.org/NginxHttpUpstreamModule

综上,我们利用nginx的反向代办署理服务器reverseproxyserver的功效,将其安排到多台apacheserver的前端。
nginx仅仅用来处置静态页面呼应和静态哀求的代办署理pass,背景的apacheserver作为appserver来对前台pass过去的静态页面举行处置并前往给nginx。

经由过程以上的架构,我们能够完成nginx和多台apache组成的机群cluster的负载平衡。
两种平衡:
1)能够在nginx中界说会见分歧的内容,代办署理到分歧的背景server;如上例子中的会见phpMyAdmin目次代办署理到第一台server上;会见test.php代办署理到第二台server上;
2)能够在nginx中界说会见统一页面,平衡(固然假如服务器功能分歧能够界说权重来平衡)地代办署理到分歧的背景server上。如上的例子会见test.php页面,会平衡地代办署理到server1大概server2上。
实践使用中,server1和server2上分离保存不异的app程序和数据,必要思索二者的数据同步。
开发linux发行版的人都是通读过linux内核代码,对linux原理极其精通的人。
作者: 灵魂腐蚀    时间: 2015-1-18 08:28
就这样,我们一边上OS理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务
作者: 第二个灵魂    时间: 2015-1-24 14:29
任何一个叫做操作系统的东西都是这样子构成的:内核+用户界面+一般应用程序。
作者: 精灵巫婆    时间: 2015-2-1 17:14
通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。
作者: 若相依    时间: 2015-2-7 13:15
感谢老师和同学们在学习上对我的帮助。
作者: 小魔女    时间: 2015-2-22 09:21
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
作者: 海妖    时间: 2015-3-7 00:22
Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。
作者: 爱飞    时间: 2015-3-14 00:55
清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。
作者: 再见西城    时间: 2015-3-20 23:58
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2