描述:將遠(yuǎn)程服務(wù)器映射到本地服務(wù)器的URL空間
語法:ProxyPass [路徑] !|url [鍵=值 鍵=值 ...]]
[nocanon]
上下文: server config, virtual host, directory
狀態(tài):擴(kuò)展
模
塊:mod_proxy
該指令可以將遠(yuǎn)程服務(wù)器映射到本地服務(wù)器的URL空間;本地的服務(wù)器并不是扮演傳統(tǒng)意義上的代理服務(wù)器的角色,而是表現(xiàn)為遠(yuǎn)程服務(wù)器的一個(gè)鏡像。此
本地服務(wù)器常被成為反向代理(reversed proxy)或者是網(wǎng)關(guān)(gateway)。路
徑是指本地虛擬路徑的名字;url指遠(yuǎn)程服務(wù)器的一個(gè)部分URL,不能包含查詢字符串。
注意:在使用ProxyPass
指令的時(shí)候,ProxyRequests
指令通常都應(yīng)該是關(guān)閉的。
假設(shè)本地服務(wù)器的地址是 http://example.com/
,
那么
ProxyPass /mirror/foo/ http://backend.example.com/
將會(huì)把對(duì)http://example.com/mirror/foo/bar
的
本地請(qǐng)求內(nèi)部轉(zhuǎn)換成到http://backend.example.com/bar
的
代理請(qǐng)求。
其中,!
指令當(dāng)你不想對(duì)某個(gè)子目錄進(jìn)行反向代理的時(shí)候就有用
了,例如:
ProxyPass /mirror/foo/i !
ProxyPass /mirror/foo http://backend.example.com
將會(huì)把所有的/mirror/foo
請(qǐng)求重定向到backend.example.com
除了對(duì)/mirror/foo/i
的請(qǐng)求。
注意:
順序很重要:排除的指令必須在一般的ProxyPass
指令
之前。
和Apache 2.1一樣,具備了使用到后端服務(wù)器的線程池的能力。使用“鍵=值
”
的參數(shù)便可調(diào)節(jié)線程池的分配。硬性最大值(Hard Maximum)
的
默認(rèn)值為當(dāng)前MPM中每個(gè)進(jìn)程的線程數(shù)量。在Prefork MPM中,該值總是為1,在Worker MPM中,該值受ThreadsPerChild
控制。
設(shè)置min
可以決定有多少到后端服務(wù)器的鏈接始終打開。根據(jù)
需要最多創(chuàng)建數(shù)量為柔性最大值(Soft Maximum),也就是smax
的
鏈接。任何超出smax
數(shù)量的鏈接都會(huì)指定一個(gè)生存時(shí)間也就是ttl
。Apache不會(huì)同時(shí)創(chuàng)建超過硬性最大值(或max
)數(shù)量的到后端服務(wù)器的鏈接。
ProxyPass /example http://backend.example.com smax=5 max=20 ttl=120 retry=300
參數(shù) |
默認(rèn)值 |
描述 |
min |
0 |
到后端服務(wù)器的總是打開的鏈接最小數(shù)。 |
max |
1…n |
允許連接到后端服務(wù)器的硬性最大鏈接數(shù)。硬性最大值 的默認(rèn)
值為當(dāng)前MPM中每個(gè)進(jìn)程的線程數(shù)量。在Prefork MPM中,該值總是為1,在Worker MPM中,該值受ThreadsPerChild 控制。 |
smax |
max |
根據(jù)需要最多創(chuàng)建數(shù)量為柔性最大值(Soft Maximum),也就是smax 的
鏈接。任何超出smax 數(shù)量的鏈接都會(huì)指定一個(gè)生存時(shí)間也就是ttl 。 |
acquire |
- |
如果設(shè)置了該參數(shù),它就會(huì)成為等待鏈接池中空閑鏈接的最大時(shí)間。如果鏈接池中沒有任何空閑鏈接,那么Apache將會(huì)給客戶端返回SERVER_BUSY 狀態(tài)。 |
flushpackets |
off |
決定代理模塊是否要在接受到每段數(shù)據(jù)的時(shí)候自動(dòng)沖掉輸出緩沖。‘off’表示只有當(dāng)需要的時(shí)候才沖掉,‘on’表示每段數(shù)據(jù)后都沖,‘auto’
表示輪詢/等待一段長(zhǎng)度為‘flushwait ’毫秒的時(shí)間后如果
沒有輸入便沖掉。目前該參數(shù)僅對(duì)AJP有效。 |
flushwait |
10 |
表示如果‘flushpackets’為‘auto’,在沖掉輸出組前等待額外輸入的時(shí)間,單位毫秒。 |
keepalive |
Off |
該參數(shù)應(yīng)該在你的Apache和后端服務(wù)器之間有防火墻的時(shí)候時(shí)候,因?yàn)榉阑饓τ锌赡軙?huì)丟棄不活動(dòng)的鏈接。該標(biāo)志將會(huì)告訴操作系統(tǒng)在不活動(dòng)的鏈接
中發(fā)送KEEP_ALIVE 消息(時(shí)間間隔由全局的OS設(shè)置決定,
一般為120ms),這樣避免防火墻丟棄該鏈接。要啟用keepalive可以將該屬性設(shè)置為On 。 |
lbset |
0 |
對(duì)該工作單元所屬的負(fù)載均衡集群進(jìn)行設(shè)置。負(fù)載均衡器會(huì)先嘗試較小的lbset,然后嘗試大的。 |
ping |
0 |
Ping數(shù)據(jù)告訴Web服務(wù)器在對(duì)ajp13鏈接遞交請(qǐng)求前發(fā)送一個(gè)CPING請(qǐng)求。參數(shù)為等待CPONG響應(yīng)的延遲,單位為秒。添加該功能是為
了避免掛起和忙碌的Tomcat的一些問題。該功能需要ajp13 的ping/pong支持,已經(jīng)在Tomcat
3.3.2+、4.1.28+、5.0.13+中實(shí)現(xiàn)。它會(huì)增加普通操作中的網(wǎng)絡(luò)流量,有可能是個(gè)問題,但是它在集群節(jié)點(diǎn)失效或者繁忙的時(shí)候減少網(wǎng)絡(luò)流
量。目前該參數(shù)只對(duì)AJP有效。 |
loadfactor |
1 |
工作單元負(fù)載系數(shù)。用于BalancerMember。它是一個(gè)1到100之間的數(shù)字,用于定義應(yīng)用于該工作單元的正規(guī)化權(quán)重負(fù)載。 |
redirect |
- |
工作單元的重定向路由(Redirection
Route)。該值通常被動(dòng)態(tài)設(shè)置用于從集群中安全地移除某個(gè)節(jié)點(diǎn)。如果被設(shè)置了,所有不包含會(huì)話ID的請(qǐng)求都會(huì)被重定向到有等值route參數(shù)的
BalancerMember中。 |
retry |
60 |
線程池工作單元重試的超時(shí)時(shí)間,以秒為單位。如果到后端服務(wù)器的線程池工作單元狀態(tài)是出錯(cuò),Apache將不會(huì)遞交任何請(qǐng)求到該服務(wù)器,直到超時(shí)
結(jié)束。這可以令后端服務(wù)器關(guān)閉進(jìn)行維護(hù),并稍后上線。如果值為0則表示總是重試錯(cuò)誤狀態(tài)的工作單元不等待任何時(shí)間。 |
route |
- |
工作單元的路由,用于負(fù)載均衡器中。該路由是附加給會(huì)話ID的一個(gè)值。 |
status |
- |
用一個(gè)字符定義該工作單元的初始狀態(tài):‘D’表示禁用,‘S’表示已停止,‘I’表示忽略錯(cuò)誤,‘H’表示熱備,‘E’表示出錯(cuò)。狀態(tài)可以通過前
置‘+’表示設(shè)置或者‘-’表示清楚。這樣,‘S-E’表示設(shè)置該工作單元為已停止并清除出錯(cuò)標(biāo)志。 |
timeout |
Timeout |
鏈接超時(shí)時(shí)間,單位為秒。如果未設(shè)置,那么Apache會(huì)一直等到有可用的鏈接位置。該指令常和max參數(shù)一起使用來限制到后端服務(wù)器的鏈接。 |
ttl |
- |
超出smax連接數(shù)的非活動(dòng)鏈接的生存時(shí)間(Time To Live),單位為秒。Apache會(huì)關(guān)閉在這段時(shí)間內(nèi)沒有被用過的所有鏈接。 |
如果代理的指令類型以balancer://
開頭那么會(huì)創(chuàng)建
一個(gè)虛擬工作單元,并不直接和后端服務(wù)器通訊。它負(fù)責(zé)對(duì)一些“真正”的工作單元進(jìn)行管理。這種情況下可以給虛擬工作單元添加一系列額外參數(shù)。更多關(guān)于均衡
器如何工作的信息請(qǐng)查看mod_proxy_balancer
。
參數(shù) |
默認(rèn)值 |
描述 |
lbmethod |
byrequests |
選擇均衡器的負(fù)載均衡方式。可以是byrequests ,
進(jìn)行加權(quán)請(qǐng)求計(jì)數(shù),或者是bytraffic ,進(jìn)行加權(quán)流量字節(jié)計(jì)
數(shù)均衡。默認(rèn)按請(qǐng)求數(shù)。 |
maxattempts |
1 |
在放棄之前的故障轉(zhuǎn)移的最大嘗試次數(shù)。 |
nofailover |
Off |
如果設(shè)為‘On ’,當(dāng)工作單元被禁用或者出錯(cuò)時(shí),會(huì)話則立
即中斷。可以將該值設(shè)為On 如果后端服務(wù)器不支持會(huì)話復(fù)制
(Session replication)。 |
stickysession |
- |
均衡器粘連會(huì)話名稱。該值常常會(huì)被設(shè)置為類似JSESSIONID 或
者PHPSESSIONID 之類的值,他依賴于支持會(huì)話的后端應(yīng)用
服務(wù)器。如果后端服務(wù)器使用不同的cookie名稱或者URL編碼的ID(像servlet容器),使用|來分開他們。第一個(gè)部分針對(duì)cookie,第二
個(gè)針對(duì)路徑。 |
timeout |
0 |
均衡器超時(shí)時(shí)間,單位為秒。如果設(shè)置了,那么就是等待空閑工作單元的最大時(shí)間。默認(rèn)是不等。 |
均衡器設(shè)置范例
ProxyPass /special-area http://special.example.com/ smax=5 max=10
ProxyPass / balancer://mycluster stickysession=JSESSIONID|jsessionid nofailover=On
<Proxy balancer://mycluster>
BalancerMember http://1.2.3.4:8009
BalancerMember http://1.2.3.5:8009 smax=10
# 性能較弱的服務(wù)器,不要給他發(fā)送太多請(qǐng)求
BalancerMember http://1.2.3.6:8009 smax=1 loadfactor=20
</Proxy>
設(shè)置一個(gè)熱備份,也就是只有當(dāng)沒有其他成員可用的時(shí)候才使用:
ProxyPass / balancer://hotcluster/
<Proxy balancer://hotcluster>
BalancerMember http://1.2.3.4:8009 loadfactor=1
BalancerMember http://1.2.3.5:8009 loadfactor=2
# 以下是熱備份
BalancerMember http://1.2.3.6:8009 status=+H
ProxySet lbmethod=bytraffic </Proxy>
正常情況下,mod_proxy會(huì)標(biāo)準(zhǔn)化被ProxyPass的URL。但它可能會(huì)和某些后端不兼容,尤其是那些利用了PATH_INFO的。
可選的nocanon關(guān)鍵詞可以禁止它,并不動(dòng)地直接將URL路徑傳遞給后端。注意它可能會(huì)影響到后端的安全性,因?yàn)樗^了由代理提供的對(duì)常見的基于
URL的攻擊的保護(hù)。
當(dāng)用在<Location>
節(jié)中的時(shí)候,
第一個(gè)參數(shù)應(yīng)被忽略,并且本地的路徑將從<Location>
取得。
如果你需要更加有彈性的反向代理配置,參見是用[P]
標(biāo)志的RewriteRule
指令。
posted on 2010-07-02 09:36
藍(lán)劍 閱讀(6701)
評(píng)論(0) 編輯 收藏 所屬分類:
WebServer