歡迎您光臨本站 註冊首頁

CentOS5.1(squid2.6)下配置反向代理

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

CentOS5.1(squid2.6)下配置反向代理

CentOS5.1(squid2.6)下配置反向代理

                                                                                            王斌斌

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作為公司內部伺服器的反向代理,兩塊網卡,其IP分別是:eth0: 10.66.0.80(接Internet外部網路);eth1:192.168.1.200(接公司內部私有網路)。
Internet外部網路通過Squid代理伺服器,訪問公司內部伺服器。例如,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反向代理伺服器的IP)

這裡,Squid反向代理伺服器監聽埠:8000 (默認是:3128)

在客戶端,打開瀏覽器,在瀏覽器地址欄輸入: www.serverA1.com:8000 下圖顯示了客戶端發出這個請求后,到最後收到數據的整個流程。



Phase 1:這裡客戶端在瀏覽器地址欄輸入: www.serverA1.com:8000 通過Client本地 /etc/hosts 解析,域名www.serverA1.com對應的 IP 是10.66.0.80(Squid反向代理伺服器),於是客戶端向 Squid 反向代理伺服器埠8000發送請求。
註:在客戶端瀏覽器地址欄輸入: www.serverA1.com:8000 和 http://10.66.0.80:8000 是不一樣的,雖然都是請求 Squid 反向代理伺服器 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有四千多行,其中大部分的是註釋,應該說根據這個配置文件配置一個基本的代理伺服器(正向、反向)比較容易。 我在配置過程中,遇到的主要問題是不知道如何讓 Squid對多個伺服器作反向代理(不同IP對應的伺服器,同一IP不同埠對應的服務 器),在查閱一些文檔,做了很多實驗后,才做成。其關鍵配置項就是這兩個指令: cache_peer 和 cache_peer_domain。這兩個指令也是 squid-2.6 和 squid-2.5的主要區別之一(紅帽 RHLE4集成的是 Squid-2.5,RHEL5集成的是Squid-2.6)。在 squid-2.5中,反向代理所涉及到的關鍵配置指令是: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 這三個指令


這是我見過最正確的配置,因不能貼圖,詳見http://hi.baidu.com/yuhongchun027
《解決方案》

謝謝樓主,有一事不明白.客戶端訪問一定要加埠號嗎?
如www.serverA1.com:81
www.serverA2.com:82
www.serverb.com:80
如果不加埠號行嗎?
《解決方案》

不加埠就是默認的80,我做實驗就沒加
《解決方案》

他加上81,82埠也是為了更好的證明實驗目的,沒別的意思的
《解決方案》

在IE上直接打這三個域名可以防問各自的伺服器嗎?
www.serverA1.com
www.serverA2.com
www.serverb.com
《解決方案》

要帶埠才行。
《解決方案》

http://wiki.squid-cache.org/SquidFaq/ReverseProxy

看看這裡就明白了,樓主寫的是一種實現方式。

Sending different requests to different backend web servers
To control which web servers (cache_peer) gets which requests the cache_peer_access or cache_peer_domain directives is used. These directives limit which requests may be sent to a given peer.

Example mapping different host names to different peers:


www.example.com         -> server 1
example.com             -> server 1
download.example.com    -> server 2
.example.net            -> server 2squid.conf:


cache_peer ip.of.server1 parent 80 0 no-query originserver name=server_1
acl sites_server_1 dstdomain www.example.com example.com
cache_peer_access server_1 allow sites_server_1
cache_peer ip.of.server2 parent 80 0 no-query originserver name=server_2
acl sites_server_2 dstdomain www.example.net download.example.com .example.net
cache_peer_access server_2 allow sites_server_2Or the same using cache_peer_domain


cache_peer ip.of.server1 parent 80 0 no-query originserver name=server_1
cache_peer_domain server_1 www.example.com example.com
cache_peer ip.of.server2 parent 80 0 no-query originserver name=server_2
cache_peer_domain server_2 download.example.com .example.net
《解決方案》

注意RHEL5/Centos5反向代理與RHEL4下不一樣,RHEL4所採用的squid是2.4版本。
《解決方案》

奇怪啊,正確實驗過程都發出來了,為什麼還有人問squid2.6的問題???
《解決方案》

Squid2.6將正向與反向結合起來了,這點與squid2.4不一樣。

[火星人 ] CentOS5.1(squid2.6)下配置反向代理已經有485次圍觀

http://coctec.com/docs/service/show-post-28988.html