翻譯自:https://httpd.apache.org/docs/2.4/en/howto/reverse_PRoxy.html
除了充當(dāng)”basic”服務(wù)器向用戶提供靜態(tài)及動(dòng)態(tài)的內(nèi)容之外,Apache服務(wù)器跟大多數(shù)服務(wù)器一樣,能夠提供反向代理服務(wù)方案,也被稱為”gateway”服務(wù)器
在這樣的場(chǎng)景中,httpd自己不生成或托管數(shù)據(jù),而是從一個(gè)或多個(gè)后端服務(wù)器(通常沒有直接與外部網(wǎng)絡(luò)連接)獲取內(nèi)容。當(dāng)httpd從客戶端接收一個(gè)請(qǐng)求,這個(gè)請(qǐng)求自身被代理到其中一個(gè)后端服務(wù)器,這個(gè)后端服務(wù)器處理請(qǐng)求,生成內(nèi)容并把內(nèi)容發(fā)送至httpd,然后httpd生成實(shí)際的HTTP響應(yīng)到客戶端。
這樣實(shí)現(xiàn)有眾多的原因,但是典型的原因是為了安全、高可用、負(fù)載均衡和集中認(rèn)證授權(quán)。在反向代理中,關(guān)鍵在于布局、設(shè)計(jì)和建設(shè)后端基礎(chǔ)設(shè)施(即實(shí)際處理請(qǐng)求的服務(wù)器)使得其對(duì)外界隔離和保護(hù)。對(duì)于客戶端而言,反向代理服務(wù)器是唯一的內(nèi)容來源。
典型的實(shí)現(xiàn)如下:
有關(guān)Modules
mod_proxymod_proxy_balancermod_proxy_hcheck有關(guān)指令
ProxyPassBalancerMemberProxyPass指定傳入的映射到后端服務(wù)器或一個(gè)負(fù)載均衡的服務(wù)器集群。例如將所有請(qǐng)求(“/”)代理到一個(gè)后端服務(wù)器:
ProxyPass "/" "http://www.example.com/"為了代理和代理的位置:來自后端生成的頭部被更改到指向反向代理,而不是指向自身,ProxyPassReverse是最常用的指令:
ProxyPass "/" "http://www.example.com/"ProxyPassReverse "/" "http://www.example.com/"之后確定的URIs能夠被代理,如下例:
ProxyPass "/images" "http://www.example.com/"ProxyPassReverse "/images" "http://www.example.com/"在上例中,任何以/images的路徑會(huì)被代理到指定的后端服務(wù)器,其他的會(huì)在本地被處理
反向代理是很有用的,但是仍有缺點(diǎn),如單一后端節(jié)點(diǎn)的衰減和大負(fù)載(算力不足),使得代理這些請(qǐng)求不能提供真正的優(yōu)勢(shì)。所以需要定義一個(gè)強(qiáng)力的后端服務(wù)集合或組群,一個(gè)能夠處理這樣的請(qǐng)求 和 反向代理能夠在組間進(jìn)行負(fù)載均衡和故障轉(zhuǎn)移。這樣的組被稱為集群在Apache httpd中的術(shù)語是負(fù)載均衡,一個(gè)負(fù)載均衡的定義使用< Proxy >和BalancerMember:
<Proxy balancer://myset> BalancerMember http://www2.example.com:8080 BalancerMember http://www3.example.com:8080 ProxySet lbmethod=bytraffic</Proxy>ProxyPass "/images/" "balancer://myset/"ProxyPassReverse "/images/" "balancer://myset/"balancer://<方案名>告訴httpd我們正在創(chuàng)建一個(gè)名為< 方案名 >的均衡集。集合包括2個(gè)后端服務(wù)器,httpd命名為BalancerMembers。在本案例中,任何來自于/images的請(qǐng)求將被代理到2個(gè)后端中的一個(gè),ProxySet指定該均衡器使用一個(gè)給予I/O的負(fù)載均衡算法
你可以通過ProxyPass中定義的各種參數(shù)調(diào)整均衡器和工作程序的大量配置信息。例如,假設(shè)我們想要 http://www3.example.com:8080 處理3倍流量并且超時(shí)為1s,我們可以調(diào)整配置如下:
<Proxy balancer://myset> BalancerMember http://www2.example.com:8080 BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 ProxySet lbmethod=bytraffic</Proxy>ProxyPass "/images" "balancer://myset/"ProxyPassReverse "/images" "balancer://myset/"你也可以微調(diào)各種故障轉(zhuǎn)移方案,可以詳細(xì)說明在這個(gè)方案中,那個(gè)均衡器成員甚至是均衡器應(yīng)該被訪問。例如,以下實(shí)現(xiàn)的2個(gè)故障轉(zhuǎn)移方案:1、如果其他所有在集合中的均衡器成員不工作,http://hstandby.example.com:8080 是唯一的流量接收服務(wù)器;2、如果該工作程序本身失效,http://bkup1.example.com:8080 和 http://bkup2.example.com:8080 這2個(gè)均衡器成員進(jìn)行輪換
<Proxy balancer://myset> BalancerMember http://www2.example.com:8080 BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 BalancerMember http://hstandby.example.com:8080 status=+H BalancerMember http://bkup1.example.com:8080 lbset=1 BalancerMember http://bkup2.example.com:8080 lbset=1 ProxySet lbmethod=byrequests</Proxy>ProxyPass "/images/" "balancer://myset/"ProxyPassReverse "/images/" "balancer://myset/"這個(gè)故障轉(zhuǎn)移設(shè)置的魔法在于 http://hstandby.example.com:8080 帶有+H 狀態(tài)標(biāo)志,這使得該服務(wù)器處于 熱備 模式。設(shè)置2個(gè)bkup# 服務(wù)器的組為 #1 負(fù)載均衡集合(默認(rèn)集合為0);一旦故障轉(zhuǎn)移,熱備將在第一時(shí)間啟用,當(dāng)所有常規(guī)的均衡器成員不可用時(shí),負(fù)載均衡器將嘗試最小的集合(#0,#1,#2…)
Apache httpd的逆向代理最獨(dú)特和有用的特性之一是嵌入式平衡器管理器(balancer-manager)應(yīng)用程序。與mod_status類似,balancer-manager展示當(dāng)前啟用的均衡器和均衡器成員正工作中的配置和狀態(tài)。但是,他不僅顯示這些參數(shù),還允許大多數(shù)參數(shù)的動(dòng)態(tài),運(yùn)行時(shí),即時(shí)重新配置,包括添加新的均衡器成員(BalancerMembers)到一個(gè)存在的均衡器中。開啟這個(gè)功能,需要添加以下代碼到配置中:
<Location "/balancer-manager"> SetHandler balancer-manager Require host localhost</Location>在反向代理服務(wù)器訪問url(http://rproxy.example.com/balancer-manager/)你將看到如下頁面
這種形式允許開發(fā)管理員調(diào)整各種參數(shù),關(guān)閉均衡器成員,修改負(fù)載均衡模式以及添加新的均衡器成員。例如,點(diǎn)擊均衡器本身,你講看到如下頁面
單擊一個(gè)均衡器成員,顯示如下頁面
要使更改持續(xù),需重啟反向代理,并確保BalancerPersist可用
在httpd將請(qǐng)求代理給均衡器成員之前,可以通過使用ProxyPass設(shè)置該均衡器成員的ping參數(shù)來測(cè)試該均衡器成員是否可用。通常,以動(dòng)態(tài)的方式檢查均衡器成員的健康狀態(tài)是很有益處的。通過mod_proxy_hcheck實(shí)現(xiàn)
在均衡器管理中,顯示當(dāng)前均衡器成員的狀態(tài)并且可以set/reset。這些狀態(tài)的含義如下:
新聞熱點(diǎn)
疑難解答
圖片精選