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