上一篇: rpm和deb从本质上就代表了不同理念
apache的mod_proxy 反向代理
[ 2008/12/15 22:14 | by selboo ]
在某台机器上(跑着apache)为某个域名(如www.selboo.com.cn)做反向代理
正好知道apache有mod_proxy这个东东
于是看了看文档
写下了如下的配置文件:
<VirtualHost *:80>
ServerName www.selboo.com.cn
ProxyPass / http://www.selboo.com.cn/
ProxyPassReverse / http://www.selboo.com.cn/
CustomLog logs/access_abc_log combined
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
ServerName www.selboo.com.cn
ProxyPass / http://www.selboo.com.cn/
ProxyPassReverse / http://www.selboo.com.cn/
CustomLog logs/access_abc_log combined
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
然后还要修改系统的httpd.conf
将其中的mod_proxy、mod_proxy_httpd启用
再然后
因为www.selboo.com.cn这个域名的真实服务器于我要配的服务器有内网相连(内网ip:192.168.1.100)
于是vim /etc/hosts
写入
192.168.1.100 www.selboo.com.cn
再重启apache
这就成了
===================================================
虽然很早以前就知道得用apche的mod_proxy可以用来做负载均衡,可由于太懒,一直都没有去做。今天刚好工作上也要做这个,所以就实验了一把。
要使用apache的负载均衡功能,首得得开启下面这几个模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
其中mod_proxy提供代理服务器功能,mod_proxy_balancer提供负载均衡功能, mod_proxy_http让代理服务器能支持HTTP协议。
然后,要在httpd.conf中加入这么一段配置:
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://192.168.0.1
BalancerMember http://192.168.0.2
</Proxy>
ProxyPass /mycluster !
ProxyPass / balancer://mycluster
<Location /mycluster>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from localhost
</Location>
从上面的 ProxyRequests Off 这条可以看出,实际上负载均衡器就是一个反向代理, 只不过它的代理转发地址不是某台具体的服务器,而是一个 balancer:// 协议:
ProxyPass / balancer://mycluster
下面那段是用来监视负载均衡的工作情况的,然后访问 http://localhost/mycluster/ 即可看到负载均衡的工作状况。你也可以利用这个工具将其中某一个终端要暂时从集群中移出,或者临时修改某个终端的参数(如factor等)。
这个地方要特别注意的是下面这行配置:
ProxyPass /mycluster !
如果没有这行配置,当你访问http://localhost/mycluster/也会被转发到终端上去。
改完之后重启服务器,访问你的Apache所在服务器的地址,即可看到负载均衡的效果了。 打开 mycluster的界面,可以看到请求是平均分配的。
当然,你也可以像我这个配置这样修改其中的某些参数,来获得最大的负载均衡的功效
ProxyRequests Off
ProxyPass /mycluster !
ProxyPass / balancer://mycluster/ stickysession=BALANCEID
ProxyPassReverse / http://192.168.0.1/
ProxyPassReverse / http://192.168.0.2/
<Proxy balancer://mycluster>
BalancerMember http://192.168.0.1 route=http1 loadfactor=7
BalancerMember http://192.168.0.2 route=http2 loadfactor=3
ProxySet lbmethod=byrequests
</Proxy>
<Location /mycluster>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from localhost
</Location>
其中,stickysession=BALANCEID设置根据下面的route=http1/2来进行session的绑定。因为很多网站的变量,如登陆信息等,可能是储存在服务器端的内存中的,如果不设置这个变量,用户来访问是还是不段的在不同的终端之间切换,用户就会不停的退出
loadfactor=7这个是设置不同的终端的负载均衡的权重,数值越来,转发的数量就越多。
而ProxySet lbmethod=byrequests是用来设置负载均衡的算法。通常有三种取值:byrequests(按照请求次数均衡,默认值),bytraffic(按照流量均衡),bybusyness(按照繁忙程度均衡)。
最后编辑: selboo 编辑于2010/06/30 10:06