1. 程式人生 > 實用技巧 >Squid快取代理服務

Squid快取代理服務

目錄

一.squid簡介

1.squid是使用最普遍的開源快取代理服務

2.支援的代理協議: FTP、HTTP、SSL、套接字Socket

3.儲存分類:磁碟 -- 分割槽 --目錄(最多二級) --object(快取檔案)

4.索引方式:

Hash Tables 目錄 每個digest的索引資訊
Digest Tables 索引 不同分割槽對應的object大概說明

5.應用場景

  • web的快取,提高使用者訪問速度
  • 內網使用者的代理,代理內網使用者訪問網際網路
  • Squid支援ACL(訪問控制列表),控制使用者的上網行為

6.優勢

在於對大檔案的索引、減少訪問請求、節省頻寬

7.工作原理:

黑色線為請求,紅色線為回覆

首先客戶端訪問web服務,請求資料到達Squid代理伺服器;

Squid伺服器會先查詢快取中有沒有快取頁面或資源,如果有直接返回給客戶端;

如果沒有,就向後端web伺服器傳送請求,收到回覆後先在自己的快取中存一份,然後再發送給客戶端。

二.代理型別

傳統模式(正向代理)

標準代理伺服器必須在每一個內網主機的瀏覽器上明確指明代理伺服器的IP地址和埠號

透明模式

透明代理伺服器不需要指明代理伺服器的IP地址和埠號;

squid伺服器阻斷網絡卡通訊,並且過濾出訪問外網的HTTP流量,對於Linux系統來說,透明代理伺服器使用iptables或者ipchains實現;其餘操作和標準代理伺服器相同。

反向代理模式

反向代理伺服器位於本地web伺服器和internet之間,處理所有對web伺服器的請求,阻止web伺服器和internet的直接通訊,這種方式通過降低向web伺服器的請求數降低了web伺服器的負載。

反向代理的過程隱藏了真實的伺服器。

總結:

傳統模式和透明模式下代理伺服器和客戶端屬於一個網路,伺服器並不知道自己為誰提供服務;作用都是讓內網使用者可以通過代理伺服器訪問網際網路資源,提高了訪問速度,也可以通過ACL訪問控制列表控制內網使用者的上網行為。

反向代理模式的過程中隱藏了真實的伺服器,對客戶端是透明的,客戶端並不知道真正提供訪問的伺服器;可以提高使用者的訪問速度,起到負載的作用

兩者的代理物件不同:

傳統模式和透明模式代理的物件是客戶端

反向代理模式代理的物件是服務端

各自的應用場景:

傳統和透明模式,一般用於內網使用者訪問網際網路,根據需求做快取和進行訪問控制

反向代理,一般用於公司伺服器叢集做web快取

三.squid代理軟體相關資訊

squid服務端

squid			   	   #服務名/軟體包
/etc/squid/squid.conf  #主配置檔案
/etc/rc.d/init.d/squid #啟動指令碼
/usr/sbin/squid		   #主程式,二進位制命令
TCP 3128			   #預設監聽埠
/var/log/suqid		   #日誌目錄
/var/spool/squid	   #快取目錄

常用引數:

# squid常用引數:

http_port 3128  #指定監聽端IP和埠號

access_log /var/log/squid/access.log squid 
# 日誌檔案和使用者

cache_mem 64MB # squid本身能夠呼叫的記憶體資源

cache_dir ufs /var/spool/squid 100 16 256
#快取目錄 檔案系統 路徑 最大的儲存資源 100MB 一級目錄的最大個數16 二級目錄的最大個數256

visible_hostname proxy.benet.com
# 快取伺服器名稱

dns_testnames www.163.com
# 判斷自己是否正常(存活)的機制,訪問公網網站

maximum_object_size 4096KB
#最大快取物件的大小;允許快取量

reply_body_max_size 10MB
# 允許訪問的單個檔案大小;允許通過量

四.實驗部署

傳統代理模式

# 內網伺服器
# 新增閘道器地址,指向squid的內網ip:10.10.10.19
echo "GATEWAY=10.10.10.19" >> /etc/sysconfig/network-scripts/ifcfg-eth0
server network restart
# route -n驗證


# 閘道器伺服器(squid伺服器)
# 配置eth0網絡卡為10.10.10.19;eth1網絡卡為20.20.20.19
yum -y install squid #安裝軟體

# 修改配置檔案
http_port 3128 #埠

visible_hostname 019 #快取伺服器名稱

# 啟動squid
service squid start

# 開啟路由轉發功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

# web伺服器配置
# 配置eth0網絡卡為20.20.20.20
# 編寫http測試頁面,並啟動httpd服務
vim /var/www/html/index.html 
this is ceshi ye          
service httpd start

驗證:

配置客戶機的瀏覽器代理

訪問web服務

模擬web伺服器宕機,重新整理頁面,發現永久可以訪問到html靜態頁面。

透明代理模式

# 內網客戶機新增預設路由或者修改閘道器地址為squid的ip
echo "GATEWAY=10.10.10.19" >> /etc/sysconfig/network-scripts/ifcfg-eth0

# squid伺服器
# 安裝squid服務並修改配置
yum -y install squid
vim /etc/squid/squid.conf

http_port 10.10.10.19:3128 transparent
#閘道器內網IP
visible_hostname 019

# 過載squid服務
service squid reload

# 開啟路由轉發
vim /etc/sysctl.conf
et.ipv4.ip_forward = 1
# sysctl -p

# 開啟iptables
service iptables start
chkconfig iptables on
# 新增路由規則
iptables -t nat -A PREROUTING -i eth0 -s 10.10.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

# web伺服器配置
# 配置eth0網絡卡為20.20.20.20
# 編寫http測試頁面,並啟動httpd服務
vim /var/www/html/index.html 
this is ceshi ye          
service httpd start

驗證:客戶機直接訪問web服務,不需要設定代理伺服器

反向代理模式

# 內網web伺服器:
# 新增閘道器:10.10.10.19
# 編寫測試頁面並啟動httpd服務


# squid伺服器
# 安裝squid服務
# 編輯配置檔案 /etc/squid/squid.conf

http_access allow all
# Squid normally listens to port 3128
http_port 20.20.20.19:80 vhost  #squid的外網口地址  虛擬主機
visible_hostname 019
cache_peer 10.10.10.18 parent 80 0 originserver round-robin
cache_peer 10.10.10.20 parent 80 0 originserver round-robin
# 內網中web伺服器IP  0代表環境中是否還有其他squid伺服器
# round-robin: rr演算法(這是預設寫法,但squid只有rr演算法這一種)

service squid start #啟動squid服務
# 開啟路由轉發功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 

外網客戶機訪問驗證:

五.Squid ACL設定

ACL配置

1.ACL配置規則

# ACL(Access Control List):根據源地址、目標URL、檔案型別等定義列表

acl <列表名稱> <列表型別> <列表內容> ...

#針對已定義的acl列表進行限制

http_access allow(允許) 或deny(拒絕) <acl-name> ...

2.ACL支援過濾的型別

src 	       #源地址
dst  	       #目標地址
port 	       #目標埠
dstdomain      #目標域
url_regex      #目標URL地址
Urlpath_regex  #整個目標URL路徑
maxconn	       #最大併發連線
time	       #訪問時間

3.規則總結:

如果僅僅有acl沒有設定http_access預設拒絕

如果http_access deny all 未定義(未啟用),並且自己定義了一個acl範圍,預設使用最後一條規則的反向規則

acl wangnet src 20.20.20.0/24

http_access allow localnet
http_access allow localhost  #最後一條規則

# And finally deny all other access to this proxy
# http_access deny all

# 重新載入squid
service squid reload

客戶機訪問: