Squid是一種源代碼開放的高性能代理緩存服務器。它可支持FTP,gopher和Http數據對象的代理。另外,Squid也支持SSL,多樣化訪問控制和代理請求的完整日志功能。通過輕量級的網際緩存協議,Squid以網狀或層次的方式分配內存,這樣能節省額外的帶寬。提供Http服務加速代理,Web服務器把Http數據推到Squid緩存中,外界的請求訪問可以通過緩存提取所需數據,實現Web服務器的動態鏡像。
另外,為了實現對Squid服務器的監控,采用MRTG。MRTG 是 Multi Router Traffic Grapher 的縮寫,它主要的用途是監測網絡服務設備的流量,並生成包括圖片的Html文件,可以直觀的顯示網絡服務的流量,以提供Squid緩存服務的監測。
通過Squid+MRTG可以配置一個完善的代理服務提供方案。下面為具體配置步驟:
一.基礎准備
Squid下載地址:http://www.squid-cache.org
版本:squid-2.4.STABLE4-src.tar.gz
MRTG下載地址:http://people.ee.ethz.ch/~oetiker/weBTools/mrtg/pub/
版本:mrtg-2.9.22.tar.gz
機器配置為:256M內存,9G硬盤(其中4G分區專用緩存目錄),PII433。
二.安裝步驟
解壓Squid(一般做法,把軟件包括在/opt目錄下)
#tar zxvf squid-2.4.STABLE4-src.tar.gz
#cd squid
//進行編譯
#./configure --prefix=/usr/local/squid --enable-delay-pools --enable-snmp --enable-cache-digests --enable-auth-modules=”NCSA”
#make all
#make install
*對編譯項目的解釋:
--prefix 為編譯Squid所存放的目錄,這裡為/usr/local/squid
--enable-delay-pools 此選項使能一個延時池,這樣能對某些特定的請求限制額定帶寬。
--enable-snmp 此選項可以讓MRTG使用SNMP協議對服務器的流量狀態進行監測,因此必須選擇此項,使Squid支持SNMP接口。
--enable-cache-digests 使能緩存摘要,本來此項目的是為了在Squid集群服務之間迅速發現緩存對象,這裡在本地使用,可以加快請求時,檢索緩存內容的速度。
--enable-auth-modules 此編譯選項啟用認證模塊,可以對訪問代理用戶進行授權。
安裝MRTG
#tar zxvf mrtg-2.9.22.tar.gz
#cd mrtg*
#./configure --prefix=/usr/local/mrtg-2
#make
#make install
/* 幾點說明:
1.MRTG大部分程序是用Perl腳本寫成,需要Perl版本為5.005以上才能運行,RH 7.2帶有perl版本為v5.6.0,非常滿足要求。(如果版本不夠,請到www.perl.com下載安裝。)
2.MRTG需要zlib,gd和libpng三個處理圖形的庫支持,RH7.2滿足此要求。(如果沒有安裝,請到http://www.boutell.com/gd/ http://www.libpng.org/pub/png/src/ http://www.gzip.org/zlib 下載安裝)
三.具體配置
lSquid配置(僅對必要選項配置並說明):
http_port 80
此選項用於Squid代理所偵聽的端口,由於要實現Http加速代理,則偵聽端口80
tcp_outgoing_address 255.255.255.255
此句法指定了遠程服務器的IP地址,這裡我們使用255.255.255.255來指定為所有地址
tcp_incoming_address
這裡可以使用http_port語法進行綁定端口和IP地址。表示客戶端的請求。可以不使用。
cache_mem 64 MB
由於Squid在讀寫磁盤,I/O通道,數據轉貯等需要大量內存,我們可以把內存值稍微設置大一些,這樣可以提供服務器性能。
cache_swap_low 95
這用做表示緩存內部對象的替換的衡量基線。當交換分區的磁盤利用率超越這個基線,那麼緩存對象替換也就隨之開始。這裡是用百分率做衡量標准。
cache_swap_high 98
此標記用於緩存對象替換的最高程度,當交換分區磁盤利用率接近此設置,則表示對象的更新程度更為劇烈。這裡由於我的緩存區設置比較大,因此設置為98%。
下面幾個配置標記采用系統默認配置。
{ maximum_object_size 4096 KB
{ 超過此尺寸的對象將不緩存。
{ minimum_object_size 0 KB
{ 小於此尺寸的對象將不緩存。
{ maximum_object_size_in_memory 8 KB
{ 內存中能緩存的最大對象尺寸。
{ ipcache_size 1024
{ 指定IP緩存大小。
{ ipcache_low 90
{ 緩存IP地址的最低基線。
{ ipcache_high 95
{ 緩存IP地址的最高極限。
{ fqdncache_size 1024
{ 緩存DNS全域名解析的尺寸。
cache_replacement_policy lru
此標記用於當緩存新對象時,使用緩存策略來清除緩存中特定對象。這裡使用lru表示:它只替換長時間沒有被訪問過的對象。其他策略請參看配置文檔介紹。
memory_replacement_policy lru
此用法同上,區別在於替換內存對象。
cache_dir ufs /cache 4000 16 256
設置緩存根目錄為/cache,類型為ufs,緩存區大小為4G,可以有16個二級子目錄,每有二級目錄有256個三級子目錄。
cache_Access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_swap_log /var/log/squid/swap.log
上面幾項是緩存日志記錄的路徑和文件名。
log_ip_on_direct on
記錄客戶端主機的IP地址。
log_fqdn on
記錄全DNS域名解析。
mime_table /usr/local/squid/etc/mime.conf
Squid所用mime的文件路徑
pid_filename /usr/local/squid/logs/squid.pid
Squid進程ID的文件。
ftp_user
[email protected]
這裡可以使用匿名登陸FTP服務器。
ftp_list_width 32
FTP文件列表長度,超過長度則截斷文件名。
ftp_passive on
允許主動連接FTP服務器。
dns_nameservers 202.98.187.1
指定代理的域名解析服務器。
authenticate_program /usr/local/squid/bin/ncsa_auth
/usr/local/squid/etc/passwd
代理認證程序,這裡在/usr/local/squid/etc使用htpasswd產生一個密碼文件,具體方法如下:
#htpasswd –cdb passwd auth_usr1 pass1
#htpasswd –db passwd auth_usr2 pass2
#htpasswd –db passwd auth_usr3 pass3
創建passwd文件,並添加auth_usr1,auth_usr2,auth_usr3三個認證用戶。
authenticate_children 5
所需要要產生的認證進程數。
authenticate_ttl 3600
此標記設置認證保持時間。
authenticate_ip_ttl 1800
此標記設置認證綁定IP地址的時間長度。
authenticate_ip_ttl_is_strict on
此標記可在authenticate_ttl時間內,拒絕其他非認證IP地址訪問。
request_header_max_size 10 KB
request_body_max_size 1 MB
設置了Http請求的包頭和數據大小。
request_body_max_size 0
這裡,請求所返回的數據大小為0,意義為沒有任何限制。
connect_timeout 180 seconds
read_timeout 15 minutes
request_timeout 20 seconds
上面幾項是代理服務幾個超時設置,這裡使用配置文件默認值。
下面是訪問控制列表一些配置,這裡對訪問的IP地址,域名,訪問類型極其訪問代理的權限做的限制:
acl acldomain dstdomain .ynst.net.cn
acl acceleratedport port 80
acl acceleratedhost dst 202.98.187.17/255.255.255.255
acl aclprotocol proto HTTP FTP
acl aclmethod method GET POST
acl aclauth proxy_auth required
(注:這裡使用required表示任何passwd文件中存在的合法用戶才授予訪問權限。)
acl aclsnmp snmp_community secrect
MRTG可以使用snmp協議檢測此代理服務運行狀態。
acl aclconn maxconn 20
可並行連接的最大數量。
啟用定義的訪問控制列表
http_access allow manager localhost
http_access deny manager
http_access allow aclauth
http_access allow acceleratedport acceleratedhost
http_access deny all
下面為緩存管理設置
cache_mgr
[email protected]
設置緩存管理者的接受郵件地址。
cache_effective_user squidusr
cache_effective_group squidgrp
設置執行Squid的用戶和用戶組。
{注:設置用戶和用戶組及其權限修改方法如下:
#groupadd squidgrp
#useradd –g squidgrp –d /home/squidusr squidusr
修改log日志權限屬性,使squidusr有寫權限。
#chown squidusr /var/log/squid
#chgrp squidgrp /var/log/squid
#chown squidusr /var/log/squid/*.log
#chown squidgrp /var/log/squid/*.log
}
下面配置Http服務加速代理
httpd_accel_host 202.98.187.17
httpd_accel_port 80
httpd_accel_with_proxy on
(注:如果配置代理和加速服務,必須httpd_accel_with_proxy選項打開。如果需要配置多個加速,可以使用虛擬的概念。)
snmp_port 3401
此標記設置snmp_port端口為3401,可以使MRTG監測服務運行狀態。
snmp_access allow aclsnmp localhost
snmp_access deny all
snmp_incoming_address 0.0.0.0
snmp_outgoing_address 0.0.0.0
以上選項用於配置和MRTG交互信息的Snmp設置。
digest_generation on
digest_rebuild period 1 hour
digest_rewrite_period 1 hour
digest_swapout_chunk_size 4096 bytes
digest_rebuild_chunk_percentage 10
產生緩存摘要,並設置摘要重構所需要的時間及其相關設置,這裡采用系統默認設置。緩存摘要使的龐大的緩存內容形成一個微型檢索,提高代理性能。
最後我們進行延遲隊列池進行配置
延遲隊列池可以基於一定規則對特定請求數據的進行限制,這樣可以防止惡意用戶發送非正規數據串攻擊服務器。
以下選項只在必要處進行說明,配置如下:
delay_pools 1 #定義一個池
delay_class 1 1 #池為1類型
delay_access 1 allow all #允許類型1的所有請求訪問
delay_parameters 1 128000/128000 #限制訪問的128k/s
delay_initial_bUCket_level 50 #Squid啟動時,初始化池所用的帶寬數量。
運行Squid代理服務:
#squid –z /*創建Squid所使用的緩存目錄結構
如果想在前台運行
#squid –NCdl
如果想在後台運行
#squid
檢查Squid是否運行
#squid –k check
lMRTG配置:
首先測試SNMP服務是否啟動:
#snmpwalk -p 3401 hostname communitystring .1.3.6.1.4.1.3495.1.1
如果看到如下輸出:
enterprises.nlanr.squid.cacheSystem.cacheSysVMsize = 7970816
enterprises.nlanr.squid.cacheSystem.cacheSysStorage = 2796142
enterprises.nlanr.squid.cacheSystem.cacheUptime = Timeticks: (766299) 2:07:42.99
則說明SNMP正常工作。
按照mrtg.hdl.com的文檔,使用cfgmaker和indexmaker就可以生成MRTG所需要的Web發布文件。使用cfgmaker可以創建配置MRTG所需要的配置文件,而Indexmaker則是檢索MRTG生成的Web文件,制作一個。這裡,我提供一種更為簡潔的辦法:
(感謝Chris提供的mrtg-squid.cfg文件和index.html,可到http://www.psychofx.com/chris/unix/mrtg/ 下載這兩個文件。)
修改mrtg-squid.cfg文件選項如下:
修改 WorkDir 和 LoadMIBs 路徑設置
修改所有出現在文件中的"hostname" 為你實際服務器名字
修改所有 "chris"字段為你需要的名字和地址
修改community 字串屬性
這裡配置如下:
WorkDir: /home/www/mrtg/squid
LoadMIBs: /usr/local/squid/etc/mib.txt
所有public@hostname修改secrect@proxysvr
創建/home/www/mrtg/squid這樣一個目錄。
#mkdir /home/www/mrtg/squid
#cd /home/www/mrtg/squid
#cp /opt/mrtg-squid.cfg .
#mrtg mrtg-squid.cfg
#cp /opt/index.html .
修改/etc/httpd/conf/httpd.conf如下幾個選項
Listen 8000
Port 8000
Documentroot /home/www/mrtg/squid
由於mrtg讀取文件需要資源,因為合理設置讀取間隔,這裡我設置為5分鐘:
crontab –e
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /home/www/mrtg/squid/mrtg-squid.cfg
這樣,我們就建立了一個完善的代理加速訪問服務器,通過mrtg的強大監控,可以統計服務器運行時設備運行狀態。由於以上軟件遵從GNU,因此一種強大而有經濟的建站手段。通過認證控制,允許特定用戶使用代理服務。而Web加速服務器則成為服務器鏡像的方便手段