CentOS 6.x用普通用戶無法使用1024的端口,當(dāng)使用80端口時(shí),可以使用iptables做轉(zhuǎn)發(fā)。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
apache的反向代理的Tomcat
<VirtualHost *:80>
ServerName www.example.com
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
<proxy balancer://test>
BalancerMember http://172.16.0.76:8080 loadfactor=1 route=TomcatA
BalancerMember http://172.16.0.77:8080 loadfactor=1 route=TomcatB
</proxy>
ProxyPass / balancer://test/
ProxyPassReverse / balancer://test/
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
Order deny,allow
Allow from all
</Location>
</VirtualHost>
關(guān)于如上apache指令的說明:
ProxyPreserveHost {On|Off}:如果啟用此功能,代理會(huì)將用戶請求報(bào)文中的Host:行發(fā)送給后端的服務(wù)器,而不再使用ProxyPass指定的服務(wù)器地址。如果想在反向代理中支持虛擬主機(jī),則需要開啟此項(xiàng),否則就無需打開此功能。
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多級代理中控制代理請求的流向。默認(rèn)為Off,即不啟用此功能;On表示每個(gè)請求和響應(yīng)報(bào)文均添加Via:;Full表示每個(gè)Via:行都會(huì)添加當(dāng)前apache服務(wù)器的版本號信息;Block表示每個(gè)代理請求報(bào)文中的Via:都會(huì)被移除。
ProxyRequests {On|Off}:是否開啟apache正向代理的功能;啟用此項(xiàng)時(shí)為了代理http協(xié)議必須啟用mod_proxy_http模塊。同時(shí),如果為apache設(shè)置了ProxyPass,則必須將ProxyRequests設(shè)置為Off。
ProxyPass [path] !|url [key=value key=value ...]]:將后端服務(wù)器某URL與當(dāng)前服務(wù)器的某虛擬路徑關(guān)聯(lián)起來作為提供服務(wù)的路徑,path為當(dāng)前服務(wù)器上的某虛擬路徑,url為后端服務(wù)器上某URL路徑。使用此指令時(shí)必須將ProxyRequests的值設(shè)置為Off。需要注意的是,如果path以“/”結(jié)尾,則對應(yīng)的url也必須以“/”結(jié)尾,反之亦然。
另外,mod_proxy模塊在httpd 2.1的版本之后支持與后端服務(wù)器的連接池功能,連接在按需創(chuàng)建在可以保存至連接池中以備進(jìn)一步使用。連接池大小或其它設(shè)定可以通過在ProxyPass中使用key=value的方式定義。常用的key如下所示:
◇ min:連接池的最小容量,此值與實(shí)際連接個(gè)數(shù)無關(guān),僅表示連接池最小要初始化的空間大小。
◇ max:連接池的最大容量,每個(gè)MPM都有自己獨(dú)立的容量;都值與MPM本身有關(guān),如Prefork的總是為1,而其它的則取決于ThreadsPerChild指令的值。
◇ loadfactor:用于負(fù)載均衡集群配置中,定義對應(yīng)后端服務(wù)器的權(quán)重,取值范圍為1-100。
◇retry:當(dāng)apache將請求發(fā)送至后端服務(wù)器得到錯(cuò)誤響應(yīng)時(shí)等待多長時(shí)間以后再重試。單位是秒鐘。
如果Proxy指定是以balancer://開頭,即用于負(fù)載均衡集群時(shí),其還可以接受一些特殊的參數(shù),如下所示:
◇lbmethod:apache實(shí)現(xiàn)負(fù)載均衡的調(diào)度方法,默認(rèn)是byrequests,即基于權(quán)重將統(tǒng)計(jì)請求個(gè)數(shù)進(jìn)行調(diào)度,bytraffic則執(zhí)行基于權(quán)重的流量計(jì)數(shù)調(diào)度,bybusyness通過考量每個(gè)后端服務(wù)器的當(dāng)前負(fù)載進(jìn)行調(diào)度。
◇maxattempts:放棄請求之前實(shí)現(xiàn)故障轉(zhuǎn)移的次數(shù),默認(rèn)為1,其最大值不應(yīng)該大于總的節(jié)點(diǎn)數(shù)。
◇ nofailover:取值為On或Off,設(shè)置為On時(shí)表示后端服務(wù)器故障時(shí),用戶的session將損壞;因此,在后端服務(wù)器不支持session復(fù)制時(shí)可將其設(shè)置為On。
◇ stickysession:調(diào)度器的sticky session的名字,根據(jù)web程序語言的不同,其值為JSESSIONID或PHPSESSIONID。
上述指令除了能在banlancer://或ProxyPass中設(shè)定之外,也可使用ProxySet指令直接進(jìn)行設(shè)置,如:
<Proxy balancer://test>
BalancerMember http://172.16.0.76:8080 loadfactor=1
BalancerMember http://172.16.0.77:8080 loadfactor=2
ProxySet lbmethod=byrequests
</Proxy>
ProxyPassReverse:用于讓apache調(diào)整HTTP重定向響應(yīng)報(bào)文中的Location、Content-Location及URI標(biāo)簽所對應(yīng)的URL,在反向代理環(huán)境中必須使用此指令避免重定向報(bào)文繞過proxy服務(wù)器。
ajp的代理模式
使用ajp協(xié)議進(jìn)行代理
配置ajp的配置文件,將協(xié)議由http更改為ajp協(xié)議即可:
[root@proxy conf.d]# vim mod_proxy_ajp.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example.com
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
<proxy balancer://test>
BalancerMember ajp://172.16.0.76:8009 loadfactor=1 route=TomcatA
BalancerMember ajp://172.16.0.77:8009 loadfactor=1 route=TomcatB
</proxy>
<Location /lbmanager>
SetHandler balancer-manager
</Location>
ProxyPass /lbmanager !
ProxyPass / balancer://test/
ProxyPassReverse / balancer://test/
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
Order deny,allow
Allow from all
</Location>
</VirtualHost>
通過mod_jk模塊進(jìn)行代理
To be continue 。。。。