標籤:style http os 使用 ar strong 檔案 資料 div
本執行個體的網域名稱是 wenjin.cache.ibm.com.cn,通過DNS的輪詢 技術,將用戶端的請求分發給其中一台 Squid 反向 Proxy伺服器處理,如果這台 Squid 緩衝了使用者的請求資源,則將請求的資源直接返回給使用者,否則這台 Squid 將沒有緩衝的請求根據配置的規則發送給鄰居 Squid 和背景 WEB 伺服器處理,這樣既減輕後台 WEB 伺服器的負載,又提高整個網站的效能和安全性。該系統結構圖 3 如下:
圖 3. 系統結構
配置的系統內容:
- 一台 DNS 伺服器:作業系統 Freebsd,軟體 BIND 9.5,IP 192.168.76.222 ;
- 三台 Squid 伺服器:作業系統 Linux AS 4,軟體 Squid 3.0,相應的 IP 如下:
Squid1:192.168.76.223 Squid2:192.168.76.224 Squid3:192.168.76.225 |
- 三台 WEB 伺服器:作業系統 Linux AS 4,應用軟體 Tomcat 5.0+Mysql,相應的 IP 位址如下:
webServer1:210.82.118.195 webServer2:192.168.76.226 webServer1:192.168.76.227 |
應用軟體的安裝和配置
配置 DNS 伺服器
軟體利用 Freebsd 內建的 bind 9.5 。然後針對該系統配置 bind,首先修改 bind 的設定檔 /etc/namedb/named.conf,在檔案中添加
zone "cache.ibm.com.cn"{ type master; file "master/ cache.ibm.com.cn "; }; |
再在 /etc/namedb/master 目錄下添加 cache.ibm.com.cn 檔案,該檔案的內容如下:
$TTL 3600 @ IN SOA search. ibm.com.cn. root. ibm.com.cn. ( 20080807 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS search.ibm.com.cn. 1 IN PTR localhost.ibm.com.cn. wenjin IN A 192.168.76.223 wenjin IN A 192.168.76.224 wenjin IN A 192.168.76.225 |
這樣當使用者請求的時候,DNS 通過輪詢機制將 wenjin.cache.ibm.com.cn 的網域名稱解析為 192.168.76.223、192.168.76.224 和 192.168.76.225 其中之一。
配置完成後,運行 rndc star t 啟動 bind 服務。可在 /etc/rc.conf 中設定 named_enable="YES" 使得開機自啟動。
用 ps – A |grep named 查看 bind 服務是否起來;
用 nslookup wenjin.cache.ibm.com.cn 測試 bind 服務是否正常運行。
配置 Squid1 伺服器
- 下載 squid-3.0.STABLE8.tar.gz 源碼包,將其放在 /home 目錄下
- 解壓縮
tar – zxvf squid-3.0.STABLE8.tar.gz
設定配置參數:cd squid-3.0.STABLE10
./configure – prefix=/usr/local/squid |
將 squid 安裝在 /usr/local 目錄下
- 編譯安裝:
make&make install安裝完以後會在 /usr/local 目錄下看見 squid 目錄。
- 配置 squid 設定檔
編輯 squid.conf 檔案,vi /usr/local/squid/etc/squid.conf
cache_effective_user squid cache_effective_group squid ######### 設定 squid 的主機名稱 , 如無此項 squid 將無法啟動 visible_hostname squid1.nlc.gov.cn ############# 配置 squid 為加速模式 ################# http_port 80 accel vhost vport icp_port 3130 ##### 配置 squid2、squid3 為其鄰居,當 squid1 在其緩衝中沒有找到請求的資源時, 通過 ICP 查詢去其鄰置中取得緩衝 cache_peer squid2.ibm.com.cn sibling 80 3130 cache_peer squid3.ibm.com.cn sibling 80 3130 ##### squid1 的三個父節點,originserver 參數指明是原始伺服器, round-robin 參數指明 squid 通過輪詢方式將請求分發到其中一台父節點; squid 同時會對這些父節點的健康狀態進行檢查,如果父節點 down 了, 那麼 squid 會從剩餘的 origin 伺服器中抓取資料 cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin \ name=webServer1 cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin \ name=webServer2 cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin \ name=webServer3 #### 將 wenjin.cache.ibm.com.cn 域的請求通過 RR 輪詢方式轉寄到三個父節點中的一個 cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.ibm.com.cn ##### 下面是一些存取控制、日誌和緩衝目錄的設定 acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225 acl all src 0.0.0.0/0.0.0.0 http_access allow all icp_access allow localnet cache_log /usr/local/squid/var/logs/cache.log access_log /usr/local/squid/var/logs/access.log squid cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256 ####### 對 squid 的一些最佳化 ############### maximum_object_size 10240 KB ### 能緩衝的最大對象為 10M maximum_object_size_in_memory 512 KB ### 記憶體中緩衝的最大對象 512K cache_mem 256 MB ###squid 用於緩衝的記憶體量 |
儲存後 :wq 退出。
在 /etc/hosts 檔案中添加
192.168.76.223 squid1.ibm.com.cn 192.168.76.224 squid2.ibm.com.cn 192.168.76.225 squid3.ibm.com.cn |
儲存後 : wq 退出。
檢查 squid 設定檔正確與否:/usr/local/squid/bin/squid – k parse
產生緩衝目錄/usr/local/squid/bin/squid – z
啟動squid:/usr/local/squid/bin/squid
配置 squid2 和 squid3 伺服器
squid2 和 squid3 伺服器的配置方法和配置參數和 squid1 一樣,配置完成後,分別啟動這兩個伺服器上的 squid 服務。
在 squid 的記錄檔 cache.log 中,出現如下日誌資訊則說明三台 squid 之間成功配置為 sibling,且配置了三個父代理。
2008/11/17 10:08:47| Configuring Sibling squid1.ibm.com.cn/80/3130 2008/11/17 10:08:47| Configuring Sibling squid3.ibm.com.cn/80/3130 2008/11/17 10:08:47| Configuring Parent 210.82.118.195/8080/0 2008/11/17 10:08:47| Configuring Parent 192.168.76.226/8080/0 2008/11/17 10:08:47| Configuring Parent 192.168.76.227/8080/0 2008/11/17 10:08:47| Ready to serve requests. |
測試
測試之前,保證 DNS 服務、三台 squid 服務和三台 web 服務都正常起來。在用戶端輸入http://wenjin.cache.ibm.com.cn,則正確的顯示該網頁。伺服器端的響應對用戶端是透明的,用戶端不知道請求是由哪台 WEB 伺服器處理的;而且其中某台 Squid 伺服器或 WEB 伺服器發生故障,也不影響服務的正常運行。
squid2.6最正解的配置反向 Proxy實驗
CentOS5.1(squid2.6)下配置反向 Proxy
Tool: squid-2.6.STABLE6-4.el5
拓撲圖
如,有兩個網路:公司內部私人網路:192.168.1.0/24;Internet外部網路:10.66.0.0/24。
公司內部網路有兩個伺服器:
Server A提供兩種服務,連接埠81提供服務1,連接埠82提供服務2。
Server B提供一種服務,通過連接埠80來提供服務。
Squid作為公司內部伺服器的反向 Proxy,兩塊網卡,其IP分別是:eth0: 10.66.0.80(接Internet外部網路);eth1:192.168.1.200(接公司內部私人網路)。
Internet外部網路通過SquidProxy 伺服器,訪問公司內部伺服器。例如,Client 10.66.0.174,它不能直接存取公司內部伺服器,而是通過Squid訪問公司內部伺服器。
外部網路用戶端訪問公司內部網路伺服器的流程,舉個例子,如下:
首先,在 Client端修改 /etc/hosts檔案,添加如下三行:
10.66.0.80 www.serverA1.com www
10.66.0.80 www.serverA2.com www
10.66.0.80 www.serverB.com www
註:添加這三行,目的是為了讓用戶端能夠解析這三個網域名稱(www.serverA1.com www.serverA2.com www.serverB.com),其對應IP為10.66.0.80(squid反向 Proxy伺服器的IP)
這裡,Squid反向 Proxy伺服器監聽連接埠:8000 (預設是:3128)
在用戶端,開啟瀏覽器,在瀏覽器地址欄輸入: www.serverA1.com:8000 顯示了用戶端發出這個請求後,到最後收到資料的整個流程。
Phase 1:這裡用戶端在瀏覽器地址欄輸入: www.serverA1.com:8000 通過Client本地 /etc/hosts 解析,網域名稱www.serverA1.com對應的 IP 是10.66.0.80(Squid反向 Proxy伺服器),於是用戶端向 Squid 反向 Proxy伺服器連接埠8000發送請求。
註:在用戶端瀏覽器地址欄輸入: www.serverA1.com:8000 和 http://10.66.0.80:8000 是不一樣的,雖然都是請求 Squid 反向 Proxy伺服器 8000連接埠,但它們有本質的區別。如果通過 IP 方式 http://10.66.0.80:8000 訪問 Squid 伺服器,則不能實現讓 Squid伺服器對內部網路多個伺服器作代理,此時 Squid 只能將用戶端的請求向內部網路的“一個”伺服器作請求。為了實現 Squid 能對內部網路多個伺服器作代理,需要使用網域名稱方式,例如這裡的www.serverA1.com:8000,Squid 伺服器收到這樣的請求後,它會解析 Host 是 www.serverA1.com ,在 配置 Squid 時,有兩個選項,cache_peer 和 cache_peer_domain,這兩個配置項讓 Squid 有能力知道 www.serverA1.com 這個請求最終是想訪問公司內部網路伺服器A(Server A)的 81 連接埠,從而實現了 Squid 對內部多個伺服器作代理的功能需求。(關於 cache_peer和 cache_peer_domain的使用見後文)。
Phase 2:如上所述, Squid 伺服器收到用戶端發來的請求,一看是 www.serverA1.com。Squid知道接下來去請求公司內部網路伺服器A(Server A)的 81連接埠。
Phase 3:Server A 提供的服務1(Service 1)監聽連接埠 81,收到 Squid 發送過來的請求,於是根據請求發送相應資料給 Squid 伺服器。
Phase 4: Squid 收到伺服器A(Server A)從連接埠81發送過來的資料後,會將該資料在本機快取,同時將資料從自己的 8000 連接埠發送給外部網路的用戶端。
上面四個步驟結束後,用戶端就會收到所希望的資料。
值得說明的是:在整個過程中,公司內部網路的伺服器對用戶端是透明的,即用戶端並不知道內部網路究竟有哪些伺服器,提供哪些服務。用戶端僅僅是訪問 Squid 伺服器的8000連接埠,然後獲得相應的資料。
理解上面 Squid 作代理,用戶端的請求流程後,下面介紹 Squid 的一些配置項 ( squid.conf )
註:以下內容是 Squid 一些基本配置項的說明,其中重點解釋給多個伺服器作代理所涉及的配置項。需要讀者對 Squid 有一些基本的認識,另外關於 Squid 還有很多沒提到的配置項,有些配置項是直接影響 Squid 伺服器的效能,這裡不作說明。
Let′s begin:)
http_port 8000 vhost # Squid 伺服器監聽本機 8000 連接埠,vhost 支援虛擬機器主機。
cache_peer 192.168.1.50 parent 81 0 no-query originserver weight=1 name=a
cache_peer 192.168.1.50 parent 82 0 no-query originserver weight=1 name=b
cache_peer 192.168.1.51 parent 80 0 no-query originserver weight=1 name=c
cache_peer_domain a www.serverA1.com
cache_peer_domain b www.serverA2.com
cache_peer_domain c www.serverB.com
#以上六行配置,讓 Squid 伺服器知道:
#從用戶端過來的請求,如果是 www.serverA1.com,則 Squid 向 ServerA 192.168.1.50 的連接埠 81發送請求;
#從用戶端過來的請求,如果是 www.serverA2.com,則 Squid 向 ServerA 192.168.1.50 的連接埠 82發送請求;
#從用戶端過來的請求,如果是 www.serverB.com,則 Squid 向 ServerA 192.168.1.50 的連接埠 80發送請求;
cache_dir ufs /squid_cache 256 16 256 #指定 Squid 伺服器存放資料的目錄
acl all src 0.0.0.0/0.0.0.0
http_access allow all
cache_peer_access a allow all
cache_peer_access b allow all
cache_peer_access c allow all
#設定存取權限,允許所有外部客戶端訪問 a b c(我們定義的三個虛擬機器主機)
其它配置項預設即可。
註: squid-2.6.STABLE6-4.el5的主設定檔 /etc/squid/squid.conf有四千多行,其中大部分的是注釋,應該說根據這個設定檔配置一個基本的Proxy 伺服器(正向、反向)比較容易。 我在配置過程中,遇到的主要問題是不知道如何讓 Squid對多個伺服器作反向 Proxy(不同IP對應的伺服器,同一IP不同連接埠對應的服務 器),在查閱一些文檔,做了很多實驗後,才做成。其關鍵配置項就是這兩個指令: cache_peer 和 cache_peer_domain。這兩個指令也是 squid-2.6 和 squid-2.5的主要區別之一(紅帽 RHLE4整合的是 Squid-2.5,RHEL5整合的是Squid-2.6)。在 squid-2.5中,反向 Proxy所涉及到的關鍵配置指令是:httpd_accel_host, httpd_accel_port, httpd_accel_single_host, httpd_accel_with_proxy, httpd_accel_uses_host_header。httpd_accel_*這一系列的指令,在Squid-2.6中都已經去掉,取而帶之的 是 cache_peer, cache_peer_domain, cache_peer_access 這三個指令
Squid 反向 Proxy加速網站