Squid 反向 Proxy加速網站

來源:互聯網
上載者:User

標籤: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 伺服器

  1. 下載 squid-3.0.STABLE8.tar.gz 源碼包,將其放在 /home 目錄下
  2. 解壓縮tar – zxvf squid-3.0.STABLE8.tar.gz 
    設定配置參數:cd squid-3.0.STABLE10 
    ./configure – prefix=/usr/local/squid

    將 squid 安裝在 /usr/local 目錄下
  3. 編譯安裝:make&make install安裝完以後會在 /usr/local 目錄下看見 squid 目錄。
  4. 配置 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加速網站

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.