apache的ajp均衡ProxyPass的高級配置

原文地址:http://blog.sina.com.cn/s/blog_4cb531010100pkrp.html


Apache的ProxyPass指令詳解
文章分類:JavaEye 關鍵字: apache的proxypass指令詳解
原文地址:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
翻譯:ShiningRay


描述:將遠程服務器映射到本地服務器的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指令。






例子如下:
        BalancerMember ajp://localhost:8811 min=15 smax=100 max=150 ttl=5
        BalancerMember ajp://localhost:8810 min=15 smax=100 max=150 ttl=5
        BalancerMember ajp://localhost:7806 min=15 smax=100 max=150 ttl=5
    </Proxy>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章