文章出處

一、簡介

代理服務器英文全稱是Proxy Server,其功能就是代理網絡用戶去取得網絡信息。

Squid是一個緩存Internet 數據的軟件,其接收用戶的下載申請,并自動處理所下載的數據。當一個用戶想要下載一個主頁時,可以向Squid 發出一個申請,要Squid 代替其進行下載,然后Squid 連接所申請網站并請求該主頁,接著把該主頁傳給用戶同時保留一個備份,當別的用戶申請同樣的頁面時,Squid 把保存的備份立即傳給用戶,使用戶覺得速度相當快。Squid 可以代理HTTP、FTP、GOPHER、SSL和WAIS等協議并且Squid 可以自動地進行處理,可以根據自己的需要設置Squid,使之過濾掉不想要的東西。

1.1 工作流程

當代理服務器中有客戶端需要的數據時:

a. 客戶端向代理服務器發送數據請求;

b. 代理服務器檢查自己的數據緩存;

c. 代理服務器在緩存中找到了用戶想要的數據,取出數據;

d. 代理服務器將從緩存中取得的數據返回給客戶端。

當代理服務器中沒有客戶端需要的數據時:

1. 客戶端向代理服務器發送數據請求;

2. 代理服務器檢查自己的數據緩存;

3. 代理服務器在緩存中沒有找到用戶想要的數據;

4. 代理服務器向Internet 上的遠端服務器發送數據請求;

5. 遠端服務器響應,返回相應的數據;

6. 代理服務器取得遠端服務器的數據,返回給客戶端,并保留一份到自己的數據緩存中。

 

wKioL1f8WB6C5BO-AAB5DYqA92s184.jpg-wh_50

 

Squid代理服務器工作在TCP/IP的應用層。

 

wKiom1f8WKbzd_u-AADV3g297vY555.jpg-wh_50

 

1.2 Squid 分類

按照代理類型的不同,可以將Squid 代理分為正向代理和反向代理,正向代理中,根據實現方式的不同,又可以分為普通代理和透明代理。

普通代理:需要客戶機在瀏覽器中指定代理服務器的地址、端口;

透明代理:適用于企業的網關主機(共享接入Internet)中,客戶機不需要指定代理服務器地址、端口等信息,代理服務器需要設置防火墻策略將客戶機的Web訪問數據轉交給代理服務程序處理;

反向代理:是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。

官方地址:http://www.squid-cache.org/

參考文檔:http://www.squid-cache.org/Doc/config/

二、系統環境

操作系統:CentOS release 6.4 (Final)

Squid版本:squid-3.1.10-20.el6_5.3.x86_64

SELINUX=disabled

HTTP Service: stoped

三、安裝Squid服務

3.1 檢查squid軟件是否安裝

# rpm -qa|grep squid

3.2 如果未安裝,則使用yum 方式安裝

# yum -y install squid

3.3 設置開機自啟動

# chkconfig --level 35 squid on //在3、5級別上自動運行squid服務

四、squid服務器的配置文件說明

squid 的主配置文件是 /etc/squid/squid.conf,所有squid的設定都是在這個文件里配置,下面我們來講解一下該文件的配置選項。

http_port 3128      //設置監聽的IP與端口號

MB

maximum_object_size4MB  //設置squid磁盤緩存最大文件,超過4M的文件不保存到硬盤

minimum_object_size0KB  //設置squid磁盤緩存最小文件

maximum_object_size_in_memory4096KB  //設置squid內存緩存最大文件,超過4M的文件不保存到內存

cache_dirufs/var/spool/squid10016256  //定義squid的cache存放路徑、cache目錄容量(單位M)、一級緩存目錄數量、二級緩存目錄數量

logformatcombined%>a%ui%un[%tl]"%rm%ruHTTP/%rv"%Hs%h""%{User-Agent}>h"%Ss:%Sh//log文件日志格式

cache_log/var/log/squid/cache.log  //設置緩存日志

logfile_rotate60  //log輪循60天

cache_swap_high95  //cache目錄使用量大于95%時,開始清理舊的cache

cache_swap_low90  //cache目錄清理到90%時停止。

acllocalnetsrc192.168.1.0/24  //定義本地網段

http_accessallowlocalnet  //允許本地網段使用

http_accessdenyall  //拒絕所有

visible_hostnamesquid.david.dev  //主機名

cache_mgrmchina_tang@qq.com  //管理員郵箱

關于ACL的知識,大家可以自行百度查閱,其他更多高級選項,請參考官方文檔:http://www.squid-cache.org/Doc/config/。

注意:squid2.0 和squid3.0的差別還是很大的,如果配置完,啟動squid不正確,請大家多多參考官方文檔的相應版本說明。

五、普通代理服務

即標準的、傳統的代理服務,需要客戶機在瀏覽器中指定代理服務器的地址、端口。

實驗拓撲圖如下:

 

wKiom1f8Wq-ziGJAAAB-3PgnON4855.jpg-wh_50

 

5.1 配置Squid 代理服務器IP地址

將eth1的IP地址修改為200.168.10.1

# ifconfig eth1 200.168.10.1

 

wKiom1f8WsuSYfuGAAGdhnrxBwI982.jpg-wh_50

 

5.2 編輯squid 主配置文件/etc/squid/squid.conf

http_port3128

cache_mem64MB

maximum_object_size4MB

cache_dirufs/var/spool/squid10016256

access_log/var/log/squid/access.log

acllocalnetsrc192.168.1.0/24

http_accessallowlocalnet

http_accessdenyall

visible_hostnamesquid.david.dev

cache_mgrmchina_tang@qq.com

5.3 初始化

# squid –z

 

wKioL1f8XU6xY2wBAAKJjVB589U083.jpg-wh_50

 

5.4 啟動Squid

# /etc/init.d/squid start

 

wKioL1f8XWWxYFrJAAAj1o1p_VQ997.jpg-wh_50

 

5.5 配置Web 服務器

A. 安裝Apache

# rpm -qa|grep httpd

# yum -y install httpd

B. 啟動Apache并加入開機啟動

# /etc/init.d/httpd start

# chkconfig httpd on

C. 創建index.html

# echo "

Squid-Web1/200.168.10.2

" > /var/www/html/index.html

D. 修改Web服務器IP地址

將web服務器的IP地址修改為200.168.10.2

# ifconfig eth0 200.168.10.2

 

wKioL1f8Xc-COylZAAFNUkzwdv8235.jpg-wh_50

 

5.6 配置客戶端IP地址

 

wKiom1f8Xeuh1TClAADU2I9K_WQ227.jpg-wh_50

 

5.7 配置瀏覽器代理

打開瀏覽器(以IE為例,其他類似),菜單欄 -> 工具 -> Internet 選項 -> 連接 -> 局域網設置 -> 代理服務器,按照以下格式設置。

 

wKiom1f8XrzC1AUYAACbvqhVBnc032.jpg-wh_50

 

5.8 測試

 

wKioL1f8XvDArzC1AADo-QochYk460.jpg-wh_50

 

測試成功。

5.9 測試錯誤頁面

在Oracle VM VirtualBox里,因為上面手動設置了ip地址,導致外網不能訪問,剛好可以測試訪問出錯的頁面。

 

wKiom1f8XxLSFf04AAHueLSD1xs428.jpg-wh_50

 

可以看到在squid 配置文件里設置的參數在錯誤頁面里的顯示。

六、透明代理服務

適用于企業的網關主機,客戶機不需要指定代理服務器地址、端口等信息,通過iptables將客戶機的Web訪問數據轉交給代理服務程序處理。

實驗拓撲圖如下:

 

wKioL1f8XzeSoOLWAACCafktkNM894.jpg-wh_50

 

http_port3128transparentcache_mem64MB

maximum_object_size4MB

cache_dirufs/var/spool/squid10016256

access_log/var/log/squid/access.log

acllocalnetsrc192.168.1.0/24

http_accessallowlocalnet

http_accessdenyall

visible_hostnamesquid.david.dev

cache_mgrmchina_tang@qq.com

在http_port 3128 后添加transparent 關鍵字。

6.2 reload

reload 讓上面的配置生效。

# /etc/init.d/squid reload

6.3 添加iptables規則,把內部的http請求重定向到3128端口

A. 啟動iptables 服務

# /etc/init.d/iptables start

 

wKioL1f8X9rjBn0wAABUUGZLfFs687.jpg-wh_50

 

B. 清除現有iptables filter 表規則

# iptables -F

 

wKiom1f8X9vAUKVIAAE_Q5ye2gQ975.jpg-wh_50

 

C. 保存iptables 設置

# /etc/init.d/iptables save

 

wKiom1f8YWORl5CHAADb1n4oTjI472.jpg-wh_50
wKiom1f8YXHxN6mwAADb1n4oTjI751.jpg-wh_50

 

D. 查看nat 表設置

# iptables -t nat -L -n

 

wKioL1f8X9zy57MXAABhzbk2TVY397.jpg-wh_50

 

E. 在nat表中新增一條規則

# iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

 

wKioL1f8YFvT_f42AACFkzG-2jU325.jpg-wh_50

 

F. 保存

 

wKiom1f8YTnB8SzDAAD4PrBSOuk053.jpg-wh_50

 

G. 設置iptables 開機啟動

# chkconfig iptables on

6.4 修改客戶端IP地址

將默認網關設置為squid 服務器的內網ip地址。

 

wKioL1f8Ydvj1rSSAADcCyau7YM112.jpg-wh_50

 

6.5 在瀏覽器中,取消代理設置

 

wKioL1f8YdziE-S6AACUMkYiiI0217.jpg-wh_50

 

6.6 測試

 

wKioL1f8YhzyiL0jAAFn5oAUBzo288.jpg-wh_50

 

透明代理測試成功。

七、反向代理服務

為Internet用戶訪問企業Web站點提供緩存加速。

實驗拓撲圖如下:

 

wKiom1f8Yd3hnq3AAABx0XNSu0s295.jpg-wh_50

 

7.1 關閉防火墻

# /etc/init.d/iptables stop

7.2 修改Web Server 主頁

Web1:

# echo "

Squid-Web1/192.168.1.18

" > /var/www/html/index.html

Web2:

# echo "

Squid-Web1/192.168.1.19

" > /var/www/html/index.html

7.3 配置squid

http_port80accelvhost

http_accessallowall

cache_peer192.168.1.18parent800originserverround-robinweight=1cache_peer192.168.1.19parent800originserverround-robinweight=1visible_hostnamesquid.david.dev

cache_mgrmchina_tang@qq.com

7.4 啟動Squid服務

 

wKioL1f8Yd3BWgQfAAFh4gW8JEI698.jpg-wh_50

 

squid啟動失敗,因為上面設定了squid的監聽端口是80,和系統的http服務沖突,所以要將http服務停掉。

7.5 squid 啟動失敗,將系統開機自啟動的apache服務關閉。

 

wKiom1f8c__CoLunAABFk23fIKY272.jpg-wh_50

 

7.6測試

squid 采用了round-robin,所以客戶端的訪問將輪詢兩臺web服務器,采用 "Ctrl + F5" 來深度刷新測試。

Web1:

 

wKiom1f8dDWTIWlAAAEDd3q2VJc919.jpg-wh_50

 

Web2:

 

wKioL1f8dDaQE2pmAAEDVp9JVQ0507.jpg-wh_50

 

查看squid 的訪問日志。

 

wKioL1f8dDbCSoL_AAEswqsHwEM215.jpg-wh_50

 

八、實際應用

下面實驗將模擬通過不同的域名訪問不同的機器,簡單實現企業應用中的負載均衡。客戶端在瀏覽器地址欄中輸入www.squid.dev,將訪問192.168.1.18這臺機器,訪問bbs.squid.dev,將訪問192.168.1.19這臺機器。

實驗拓撲圖如下

 

wKiom1f8dDaTBwh4AAB7l91ZiZk919.jpg-wh_50

 

8.1 修改Web Server 主頁

Web1:

# echo "

www.squid.dev/192.168.1.18

" > /var/www/html/index.html

Web2:

# echo "

bbs.squid.dev/192.168.1.19

" > /var/www/html/index.html

8.2 配置Squid

http_port80accelvhost

http_accessallowall

cache_peer192.168.1.18parent800originservername=www

cache_peer192.168.1.19parent800originservername=bbs

cache_peer_domainwwwwww.squid.dev

cache_peer_domainbbsbbs.squid.dev

visible_hostnamesquid.david.dev

cache_mgrmchina_tang@qq.com

8.3配置客戶端

這里可以使用DNS服務來解析,這里我們為了方便,就在hosts 文件里直接指定。

修改C:\Windows\System32\drivers\etc\hosts 文件

 

wKioL1f8dN2w5hEPAACpLFTAv2U963.jpg-wh_50

 

8.4 測試網絡情況

 

wKiom1f8dN6jWwe_AAJuUMLp09s643.jpg-wh_50

 

8.5 測試www.squid.dev

 

wKioL1f8dN_TWagVAAEDu-oAGxA245.jpg-wh_50

 

8.6 測試bbs.squid.dev

 

wKiom1f8dN_gUkMAAAECPtWtCko734.jpg-wh_50

 

8.7 查看squid 訪問日志

 

wKioL1f8dN_SdDfbAAEePeb3YXs248.jpg-wh_50

 

8.8 查看兩臺服務器的apache 訪問日志

# tailf /var/log/httpd/access.log

 

wKiom1f8dOGCEMVsAANEEuEMcg0831.jpg-wh_50

就愛閱讀www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161206/65124.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()