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_aclearcase/" target="_blank" >ccess_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 Squid@ynst.net.cn
這里可以使用匿名登陸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 admin@ynst.net.cn
設置緩存管理者的接受郵件地址。
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