萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> Linux系統中Squid代理服務器配置全過程解析

Linux系統中Squid代理服務器配置全過程解析

   什麼是squid?

  Squid是一個緩存internet數據的一個軟件,它接收用戶的下載申請,並自動處理所下載的數據。也就是說,當一個用戶象要下載一個主頁時,它向Squid發出一個申請,要Squid替它下載,然後Squid連接所申請網站並請求該主頁,接著把該主頁傳給用戶同時保留一個備份,當別的用戶申請同樣的頁面時,Squid把保存的備份立即傳給用戶,使用戶覺得速度相當快。目前,Squid 可以代理HTTP, FTP, GOPHER, SSL 和 WAIS 協議.

  使用squid的好處:快速響應,減少網絡阻塞,增強訪問控制,提高安全性.可以針對特定的網站,用戶,網絡,數據類型實施訪問控制.

  squid有3種代理方式:普通代理模式,透明代理模式,反向代理模式

  1.普通代理模式

  一個標准的代理緩沖服務被用於緩存靜態的網頁(例如:html文件和圖片文件等)到本地網絡上的一台主機上(即代理服務器)。當被緩存的頁面被第二次訪問的時候,浏覽器將直接從本地代理服務器那裡獲取請求數據而不再向原web站點請求數據。這樣就節省了寶貴的網絡帶寬,而且提高了訪問速度。但是,要想實現這種方式,必須在每一個內部主機的浏覽器上明確指明代理服務器的IP地址和端口號。客戶端上網時,每次都把請求送給代理服務器處理,代理服務器根據請求確定是否連接到遠程web服務器獲取數據。如果在本地緩沖區有目標文件,則直接將文件傳給用戶即可。如果沒有的話則先取回文件,先在本地保存一份緩沖,然後將文件發給客戶端浏覽器。

  2.透明代理模式

  透明代理緩沖服務和標准代理服務器的功能完全相同。但是,代理操作對客戶端的浏覽器是透明的(即不需指明代理服務器的IP和端口)。透明代理服務器阻斷網絡通信,並且過濾出訪問外部的HTTP(80端口)流量。如果客戶端的請求在本地有緩沖則將緩沖的數據直接發給用戶,如果在本地沒有緩沖則向遠程web服務器發出請求,其余操作和標准的代理服務器完全相同。對於Linux操作系統來說,透明代理使用Iptables或者Ipchains實現。因為不需要對浏覽器作任何設置,所以,透明代理對於ISP(Internet服務器提供商)特別有用。

  3.反向代理模式

  反向代理是和前兩種代理完全不同的一種代理服務。使用它可以降低原始WEB服務器的負載,又稱HTTP加速器。反向代理服務器承擔了對原始WEB服務器的靜態頁面的請求,它是一種通過在繁忙的WEB服務器和Internet之間增加一個高速的WEB緩沖服務器(即:WEB反向代理服務器)來降低實際的WEB服務器的負載.Web服務器加速(反向代理)是針對Web服務器提供加速功能的。它作為代理Cache,但並不針對浏覽器用戶,而針對一台或多台特定Web服務器。只要將Reverse Proxy Cache設備放置在一台或多台Web服務器前端即可。當互聯網用戶訪問某個WEB服務器時,通過DNS服務器解析後的IP地址是Reverse Proxy Server的IP地址,而非原始Web服務器的IP地址,這時Reverse Proxy Server設備充當Web服務器,浏覽器可以與它連接,無需再直接與Web服務器相連。因此,大量Web服務工作量被卸載到反向代理服務上。不但能夠防止外部網主機直接和web服務器直接通信帶來的安全隱患,而且能夠很大程度上減輕web服務器的負擔,提高訪問速度。

  以下是squid反向代理實驗

  有2台服務器,1台HTTP Server 10.1.1.200,端口80,有2個虛擬機主機www.testone.com www.testtwo.com提供服務

  另一台Squid Server為反向代理服務器,10.1.6.200

  客戶機ip:10.1.6.173

  測試: 客戶機訪問通過Squid Server 訪問HTTP Server. 這裡需要在客戶機上修改/etc/hosts,添加二行10.1.6.200 www.testone.com

  10.1.6.200 www.testtwo.com(為了讓客戶機能夠解析這2個域名對應ip為10.1.6.200 squid反向代理服務器的ip,監聽端口默認是3128)

  Squid Server 修改/etc/hosts,添加二行10.1.1.200 www.testone.com

  10.1.1.200 www.testtwo.com

  安裝squid

  代碼如下:

  [email protected]:~# apt-get install squid

  配置squid

  代碼如下:

  [email protected]:~# vim /etc/squid/squid.conf

  http_port 3128 #http_port告訴squid在哪個端口監聽http請求,默認3128

  http_port 10.1.6.200:80 vhost #這裡vhost支持虛擬主機

  cache_dir aufs /opt/squid/cache 200 16 256 #緩存目錄的設置,語法:<目錄>

  代碼如下:

  #定義acl(訪問控制列表),語法為:acl <配置的內容>

  acl all src all

  acl localhost src 127.0.0.1/32

  acl to_localhost dst 127.0.0.0/8

  acl localnet src 10.0.0.0/8 # RFC1918 possible internal network

  acl localnet src 172.16.0.0/12 # RFC1918 possible internal network

  acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

  代碼如下:

  acl Safe_ports port 80

  acl purge method PURGE

  acl CONNECT method CONNECT

  acl manager proto cache_object

  代碼如下:

  #利用前面定義的acl,定義訪問控制規則

  http_access allow manager localhost

  http_access deny manager

  http_access allow purge localhost

  http_access deny purge

  http_access deny !Safe_ports

  http_access allow all

  代碼如下:

  cache_mem 200 MB #如果物理內存很大,盡量設置大些

  maximum_object_size 20 MB #最大緩存塊

  maximum_object_size_in_memory 5 MB #與內存保存資料有關的配置

  代碼如下:

  #虛擬機主機代理配置,如從客戶端訪問www.testone.com,則Squid向www.testone.com的80端口發送請求.

  cache_peer www.testone.com parent 80 0 no-query originserver name=one

  cache_peer www.testtwo.com parent 80 0 no-query originserver name=two

  cache_peer_domain one www.testone.com

  cache_peer_domain two www.testtwo.com

  代碼如下:

  #設置squid用戶及用戶組

  cache_effective_user proxy

  cache_effective_group proxy

  代碼如下:

  #下面是關於日志文件

  access_log /var/log/squid/access.log squid

  cache_log /var/log/squid/cache.log

  cache_store_log none

  代碼如下:

  mime_table /usr/share/squid/mime.conf

  pid_filename /var/log/squid/squid.pid

  代碼如下:

  coredump_dir /var/spool/squid

  設置緩存目錄權限為proxy,否則啟動會提示沒有權限

  代碼如下:

  [email protected]:opt# chown -R proxy:proxy squid/

  [email protected]:opt# ll

  total 8

  drwxr-xr-x 3 proxy proxy 4096 2013-02-21 22:42 squid

  在開啟squid服務之前,先檢查配置文件是否正確:(假如看不輸出,配置文件有效)

  [email protected]:opt# squid -k parse

  初始化cache目錄,即建立緩存目錄的存儲格式(在初次運行squid之前,或者增加了新的cache_dir,必須初始化cache目錄),cache目錄初始化可能花費一些時間,依賴cache目錄的大小和數量,要觀察詳細過程可以加-X選項.

  代碼如下:

  [email protected]:squid# squid -z

  2013/02/22 20:31:10| Creating Swap Directories

  啟動squid服務

  代碼如下:

  [email protected]:squid# /etc/init.d/squid start

  Starting Squid HTTP proxy: squid.

  [email protected]:squid# netstat -tunlp

  Active Internet connections (only servers)

  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

  tcp 0 0 0.0.0.0:39360 0.0.0.0:* LISTEN 1383/rpc.statd

  tcp 0 0 127.0.0.1:833 0.0.0.0:* LISTEN 1929/famd

  tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1372/portmap

  tcp 0 0 10.1.6.200:80 0.0.0.0:* LISTEN 2491/(squid)

  tcp 0 0 0.0.0.0:22000 0.0.0.0:* LISTEN 1623/sshd

  tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 2491/(squid)

  tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1890/exim4

  udp 0 0 0.0.0.0:58152 0.0.0.0:* 2491/(squid)

  udp 0 0 0.0.0.0:3130 0.0.0.0:* 2491/(squid)

  udp 0 0 0.0.0.0:711 0.0.0.0:* 1383/rpc.statd

  udp 0 0 0.0.0.0:111 0.0.0.0:* 1372/portmap

  udp 0 0 0.0.0.0:59518 0.0.0.0:* 1383/rpc.statd

  這裡不詳細講解HTTP Server 10.1.1.200配置虛擬主機過程,已分別配置好www.testone.com,www.testtwo.com虛擬主機

2016130120749868.jpg (380×139)
2016130120815357.jpg (297×146)

  查看HTTP Server日志,會發現是Squid Server ip 請求數據.

  代碼如下:

  [email protected]:apache2# tail -f www.testone.com_access.log

  10.1.6.200 - - [22/Feb/2013:20:47:17 +0800] "GET / HTTP/1.0" 304 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 734; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

  代碼如下:

  [email protected]:apache2# tail -f www.testtwo.com_access.log

  10.1.6.200 - - [22/Feb/2013:20:49:07 +0800] "GET / HTTP/1.0" 304 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QQDownload 734; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

  以下是整個訪問原理過程:

  1.當客戶端在浏覽器輸入:www.testone.com 通過本地/etc/hosts解析,域名www.testone.com對應的ip是10.1.6.200(Squid反向代理服務器),於是客戶端向Squid反向代理服務器默認3128端口發送請求,注意:在客戶端輸入www.testone.com和http://10.1.6.200是不一樣的,如果是通過ip請求,則不能實現讓Squid服務器對內部網絡多個服務器代理,需要使用域名方式.在 配置 Squid 時,有兩個選項,cache_peer 和 cache_peer_domain,這兩個配置項讓 Squid 有能力知道www.testone.com這個請求最終是想訪問HTTP服務器10.1.1.200的80端口,從而實現了 Squid 對內部多個服務器作代理的功能需求。

  2.Squid服務器收到客戶端發來的請求,一看是www.testone.com,從配置它知道請求HTTP服務器10.1.1.200的80端口.

  3.HTTP服務器提供服務監聽80端口,收到Squid發送來的請求,於是根據請求發送相應數據給Squid服務器.

  4.Squid收到HTTP服務器從80端口發送過來的數據後,會將該數據在本地緩存,同時將數據從自己的3128發送給客戶端10.1.6.173.

copyright © 萬盛學電腦網 all rights reserved