轉 by 王斌斌 : 做為筆記 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 從用戶端過來的請求,如果是 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 這三個指令。 |