Squid是一種用來緩沖Internet數(shù)據(jù)的軟件。它接受來自人們需要下載的目標(biāo)(object)的請求并適當(dāng)?shù)靥幚磉@些請求。也就是說,如果一個(gè)人想下載一web頁面,他請求Squid為他取得這個(gè)頁面。Squid隨之連接到遠(yuǎn)程服務(wù)器(比如:http://squid.nlanr.net/)并向這個(gè)頁面發(fā)出請求。然后,Squid顯式地聚集數(shù)據(jù)到客戶端機(jī)器,而且同時(shí)復(fù)制一份。當(dāng)下一次有人需要同一頁面時(shí),Squid可以簡單地從磁盤中讀到它,那樣數(shù)據(jù)迅即就會傳輸?shù)娇蛻魴C(jī)上。當(dāng)前的Squid可以處理HTTP,F(xiàn)TP,GOPHER,SSL和WAIS等協(xié)議。但它不能處理如POP,NNTP,RealAudio以及其它類型的東西。
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),大冶網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大冶等地區(qū)。大冶做網(wǎng)站價(jià)格咨詢:18980820575
你可能會想到一些問題:緩沖有多大的用處?什么時(shí)候目標(biāo)(object)應(yīng)該或者不應(yīng)該被緩沖?例如,緩沖信用卡號碼是完全不適合的,腳本文件的執(zhí)行結(jié)果在遠(yuǎn)程服務(wù)器端,站點(diǎn)經(jīng)常更新(像www.cnn.com)或者甚至站點(diǎn)不允許緩沖,這些情況也都是不適合緩沖的。Squid處理各種情況是不錯(cuò)的(當(dāng)然,這需要遠(yuǎn)程站點(diǎn)按標(biāo)準(zhǔn)形式工作)??蓤?zhí)行的cgi-bin腳本文件不被緩沖,返回正確頁眉的頁面是在一段限制了的時(shí)間內(nèi)被緩沖,而且你可以規(guī)定特殊的規(guī)則以確定什么是可以或不可以被緩沖的,還有緩沖的時(shí)間為多長。談到緩沖的用處有多大,這要看Internet的容量大小,各有不同。對于小型的緩沖區(qū)(幾轉(zhuǎn)磁盤空間)來說,返回值非常高(達(dá)到25%)。這個(gè)空間緩沖經(jīng)常訪問的站點(diǎn),如netscape,cnn和其它一些類似情況的站點(diǎn)。如果你增加一倍緩沖的磁盤空間,但你不會成倍增加你的命中率。這是因?yàn)槟汩_始緩沖網(wǎng)絡(luò)中剩余部分時(shí),這些通常時(shí)很大的而且很少被訪問。一個(gè)非常大的高速緩沖區(qū),有20轉(zhuǎn)左右,可能返回值仍小于50%,除非你對保存數(shù)據(jù)的時(shí)間長短經(jīng)常改變(一般地你不要分配20轉(zhuǎn)的磁盤空間,因?yàn)轫撁婧芸炀蜁^時(shí),應(yīng)該被刪除掉)。我們在這里說的目標(biāo)(object)指的是可保存的web頁面或其它類似的可下載頁面(ftp文件或目錄內(nèi)容也稱為目標(biāo)(object))。
3.Squid的下載和獲取
squid在諸多unix like系統(tǒng)上都有軟件庫的提供,比如在ubuntu可以使用apt install squid進(jìn)行安裝,也可以到squid的官網(wǎng)直接下載二進(jìn)制的編譯好的軟件包, 下載地址
也就是普通的代理服務(wù),,必須在客戶端的瀏覽器、QQ聊天工具、下載軟件等程序中手動(dòng)設(shè)置代理服務(wù)器的地址和端口,然后才能使用代理服務(wù)來訪問網(wǎng)絡(luò)。對于網(wǎng)頁瀏覽器,訪問網(wǎng)站時(shí)的域名解析請求也會發(fā)送給指定的代理服務(wù)器。
提供與傳統(tǒng)代理相同的功能和服務(wù),其區(qū)別在于客戶機(jī)不需要指定代理服務(wù)器的地址和端口,而是通過默認(rèn)路由、防火墻策略將web訪問重定向,實(shí)際上仍然交給代理服務(wù)器來處理。重定向的過程對于客戶機(jī)來說是“透明”的,用戶甚至并不知道自己在使用代理服務(wù),所以稱為“透明代理”。
CentOS7虛擬機(jī)、squid-4.1.tar.gz軟件包
tar zxvf squid-4.1.tar.gz -C /opt
./configure \
--prefix=/usr/local/squid \ #安裝目錄
-- sysconfdir =/etc \ #單獨(dú)將配置文件修改到其他目錄
--enable-arp-acl \ #可以在規(guī)則中設(shè)置為直接通過客戶端MAC進(jìn)行管理,防止客戶端使用IP欺騙
--enable-linux-netfilter \ #使用內(nèi)核過濾
--enable-linux-tproxy \ #支持透明模式
--enable-async-io=100 \ #異步I/O,提升存儲性能,相當(dāng)于 --enable-pthreads --enable-storeio=ufs,aufs
--enable-err-language="Simplify_Chinese" \ #錯(cuò)誤信息的顯示語言
--enable-underscore \ #允許URL中有下劃線
--enable-poll \ #使用Poll()模式,提升性能
--enable-gnuregex #使用GUN正則表達(dá)式
make && make install
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf
。。。省略
http_port 3128
cache_effective_user squid #添加 指定程序用戶
cache_effective_group squid #添加 指定賬號基本組
squid -z #初始化緩存目錄
squid #啟動(dòng)服務(wù)
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在啟動(dòng) squid..."
$CMD
fi
;;
stop)
$CMD -k shutdown &> /dev/null #這里可以仔細(xì)看下
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在關(guān)閉 squid..."
$0 start &> /dev/null
echo "正在啟動(dòng) squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0{start|stop|status|reload|check|restart}"
;;
esac
chmod +x /etc/init.d/squid #給與執(zhí)行權(quán)限
chkconfig --add squid
chkconfig --level 35 squid on #加入開機(jī)自啟動(dòng)并且在3、5模式下開機(jī)自啟動(dòng)
測試下服務(wù)啟動(dòng)腳本
主機(jī) | IP地址 | 主要服務(wù) |
---|---|---|
CentOS7-1 | 172.16.10.129 | http服務(wù) |
CentOS7-2 | 172.16.10.128 | squid服務(wù) |
windows7 | 172.16.10.131 | 客戶機(jī) |
vim /etc/squid.conf
# And finally deny all other access to this proxy
http_access allow all #添加 允許任意客戶機(jī)使用代理服務(wù)
http_access deny all
# Squid normally listens to port 3128
http_port 3128
cache_mem 64 MB #指定緩存功能所使用的內(nèi)存空間大小,便于保持訪問較頻繁的WEB對象,容量最好為4的倍數(shù),單位為MB,建議設(shè)為物理內(nèi)存的1/4
reply_body_max_size 10 MB #允許用戶下載的最大文件大小,以字節(jié)為單位。默認(rèn)設(shè)置0表示不進(jìn)行限制
maximum_object_size 4096 KB #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉(zhuǎn)發(fā)給用戶
cache_effective_user squid #添加 指定程序用戶
cache_effective_group squid #添加 指定賬號基本組
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
iptables -F #清空防火墻策略
setenforce 0 #關(guān)閉SELinux
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #允許訪問3218端口的tcp數(shù)據(jù)包通過
service squid restart
systemctl stop firewalld.service
setenforce 0
systemctl start httpd #開啟web服務(wù)
首先代理服務(wù)器要配置雙網(wǎng)卡,
其中ens33為內(nèi)網(wǎng)網(wǎng)關(guān)192.168.100.1;
ens36為外網(wǎng)網(wǎng)關(guān)12.0.0.1;
web服務(wù)器 12.0.0.12
client客戶端 192.168.100.50
echo "1" > /proc/sys/net/ipv4/ip_forward #開啟路由轉(zhuǎn)發(fā)
iptables -F #清空防火墻策略
iptables -t nat -F
#這邊解釋一下,可能有人會問不應(yīng)該是3128端口么,其實(shí)不是,因?yàn)槲沂褂胹quid4.1版本做的,有些東西和3.4版本可能會不同,如果設(shè)置3128端口,squid服務(wù)會無法開啟的,因?yàn)?128端口在被占用。
重啟squid代理服務(wù)
service squid stop
service squid start
netstat -ntap | grep squid
tcp 0 0 192.168.100.1:3129 0.0.0.0: LISTEN 57899/(squid-1)
tcp6 0 0 :::3128 ::: LISTEN 57899/(squid-1)這里可以看到我們設(shè)置的3129端口已經(jīng)啟動(dòng)了
這樣透明代理就完成了
#注:squid4.1和squid3.4版本配置還是有些不同的,希望能幫助到各位