squid介紹
簡介
Squid cache(簡稱為Squid)是一個流行的自由軟體,它符合GNU通用公共許可證。Squid作為網頁伺服器的前置cache伺服器,可以代理用戶向web伺服器請求數據並進行快取,也可以用在區域網路中,使區域網路用戶通過代理上網。Squid主要設計用於在Linux一類系統運行。
squid不僅可用在Linux系統上,還可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系統上。
Squid與Linux下其它的代理軟體如Apache、Socks、TIS FWTK和delegate相比,下載安裝簡單,配置簡單靈活,支持快取和多種協定。用ipchains+Squid的解決方案,就可以獲得通過快取高性能的同時能夠無縫的訪問Internet。
Squid是一個快取internet數據的一個軟體,它接收用戶的下載申請,並自動處理所下載的數據。也就是說,當一個用戶想要下載一個主頁時,它向Squid發出一個申請,要Squid替它下載,然後Squid 連線所申請網站並請求該主頁,接著把該主頁傳給用戶同時保留一個備份,當別的用戶申請同樣的頁面時,Squid把保存的備份立即傳給用戶,使用戶覺得速度相當快。
優點
對於Web用戶來說,Squid是一個高性能的代理快取伺服器,可以加快內部網瀏覽Internet的速度,提高客戶機的訪問命中率。Squid不僅支持HTTP協定,還支持FTP、gopher、SSL和WAIS等協定。和一般的代理快取軟體不同,Squid用一個單獨的、非模組化的、I/O驅動的進程來處理所有的客戶端請求。
Squid將數據元快取在記憶體中,同時也快取DNS查尋的結果,除此之外,它還支持非模組化的DNS查詢,對失敗的請求進行消極快取。Squid支持SSL,支持訪問控制。由於使用了ICP,Squid能夠實現重疊的代理陣列,從而最大限度的節約頻寬。
Squid由一個主要的服務程式Squid,一個DNS查詢程式dnsserver,幾個重寫請求和執行認證的程式,以及幾個管理工具組成。當Squid啟動以後,它可以派生出指定數目的dnsserver進程,而每一個dnsserver進程都可以執行單獨的DNS查詢,這樣一來就大大減少了伺服器等待DNS查詢的時間。
Squid的另一個優越性在於它使用訪問控制清單(ACL)和訪問許可權清單(ARL)。訪問控制清單和訪問許可權清單通過阻止特定的網路連線來減少潛在的Internet非法連線,可以使用這些清單來確保內部網的主機無法訪問有威脅的或不適宜的站點。
Squid對硬體的要求是記憶體一定要大,不應小於128M,硬碟轉速越快越好,最好使用伺服器專用SCSI硬碟,處理器要求不高,400MH以上即可。
Squid套用
配置
代理伺服器原理
代理伺服器接受到請求後,首先與訪問控制列表中的訪問規則相對照,如果滿足規則,則在快取中查找是否存在需要的信息。
客戶端B向代理伺服器提出相同的請求。代理伺服器也首先與訪問控制列表中的訪問規則相對照。如果滿足規則,則將快取中的信息傳送給客戶端B
以下是一些squid的基本配置參數解釋
http_port 3128 //設定監聽的IP與連線埠號
cache_mem 64 MB //設定記憶體緩衝的大小
cache_dir ufs /var/spool/squid 2000 16 256//設定硬碟緩衝大小
cache_effective_user squid //設定快取的有效用戶
cache_effective_group squid //設定快取的有效用戶組
dns_nameservers 192.168.0.254 //設定DNS伺服器地址,一般可以不設定,默認使用伺服器自己設定的dns
cache_access_log /var/log/squid/access.log //設定訪問日誌檔案
cache_log /var/log/squid/cache.log //設定快取日誌檔案
visible_hostname 192.168.0.20 //設定squid主機名稱
以上全局參數根據你自己的需要修改
其實linux下的伺服器配置檔案最好就是squid,它對每個參數都有解釋,而且有很多很多的實例
Acl的訪問控制列表
語法
語法:acl 列表名稱 列表類型 [-i] 列表值
列表名稱:用於區分Squid的各個訪問控制列表,任何兩個訪問控制列表不能用相同的列表名。雖然列表名稱可以隨便定義,但為了避免以後不知道這條列表是乾什麼用的,應儘量使用有意義的名稱,如badurl、clientip和work time等。
列表類型:是可被Squid識別的類別。Squid支持的控制類別很多,可以通過IP位址、主機名、MAC地址和用戶/密碼認證等識別用戶,也可以通過域名、域後綴、檔案類型、IP位址、連線埠和URL匹配等控制用戶的訪問,還可以使用時間區間對用戶進行管理
-i選項:表示忽略列表值的大小寫,否則Squid是區分大小寫的。
列表值:針對不同的類型,列表值的內容是不同的。例如,對於類型為src或dst,列表值的內容是某台主機的IP位址或子網地址;對於類型為time,列表值的內容是時間;對於類型為srcdomain和dstdomain,列表值的內容是DNS域名。
常用調試命令
1、初始化你在 squid.conf 里配置的 cache 目錄
#/usr/sbin/squid -z //第一次啟動squid服務時必須輸入此命令
如果有錯誤提示,請檢查你的 cache目錄的許可權。
2、對你的squid.conf 排錯,即驗證 squid.conf 的 語法和配置。
#/usr/sbin/squid -k parse
如果squid.conf 有語法或配置錯誤,這裡會返回提示你,如果沒有返回,恭喜,可以嘗試啟動squid。
3、在前台啟動squid,並輸出啟動過程。
#/usr/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,啟動成功。
然後 ctrl + c,停止squid,並以後台運行的方式啟動它。
4、啟動squid在後台運行。
#/usr/sbin/squid -s
這時候可以 ps -A 來查看系統進程,可以看到倆個 squid 進程。
5、停止 squid
#/usr/sbin/squid -k shutdown
這個不用解釋吧。
6、重引導修改過的 squid.conf
#/usr/sbin/squid -k reconfigure
這個估計用的時候比較多,當你發現你的配置有不盡你意的時候,可以隨時修改squid.conf,然後別忘記對你的 squid.conf排錯,然後再執行此指令,即可讓運行中squid重新按照你的squid.conf 來運行。
7、把squid添加到系統啟動項
編輯 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s
當然,並不是每個人都喜歡這種啟動方式,你可以用你最習慣的方式;或者把它安裝為服務。
再來點其他的。
1、修改cache 快取目錄的許可權。
#chown -R squid:squid /home/cache
我的cache快取目錄是 /home/cache,squid執行用戶和用戶組是 squid,squid。
2、修改squid 日誌目錄的許可權
#chown -R squid:squid /usr/local/squid/var/logs
這一步並不是適合每一個使用squid的用戶.意為讓squid有許可權在該目錄進行寫操作 。
例如生成 access.log cache.log store.log
3、查看你的日誌文檔。
#more /usr/local/squid/var/logs,/access.log | grepTCP_MEM_HIT
該指令可以看到在squid運行過程中,有哪些檔案被squid快取到記憶體中,並返回給訪問用戶。
#more /usr/local/squid/var/logs/access.log |grepTCP_HIT
該指令可以看到在squid運行過程中,有哪些檔案被squid快取到cache目錄中,並返回給訪問用戶。
#more /usr/local/squid/var/logs/access.log |grepTCP_MISS
該指令可以看到在squid運行過程中,有哪些檔案沒有被squid快取,而是現重原始伺服器獲取並返回給訪問用戶。
關於 TCP_XXXX 等參數及代表的信息,請參看彭勇華《squid中文權威指南》13.2.1 章節。
當然,本例中的藍色文字是可以修改為其他的參數,例如你的域名,同樣可以看到access.log里關於該域名的行。
4、squid -k rotate 輪換squid的日誌檔案/var/log/squid,Squid代理伺服器日誌檔案
的增長速度是驚人的,很容易點球滿磁碟空間導致系統不能正常工作,甚至是當機.為了解決日誌檔案增長太快的問題,squid採用了"輪換"的方法.在squid.conf中可以通過logfile_rotate來設定檔案輪換的個數,如:
logfile_rotate 10 ,輪換的工作一般用crontab定時器完在周期性的日誌輪換,例如每周六凌晨2:00進行日誌輪換,則執行如下命令: crontab -e
0 2 * * 6 squid -k rotate
小貼士:Squid默認的錯誤提示信息為英文,對於英文不好的用戶來說,實在不方便.在/etc/squid/squid.conf里添加如下:
error_directory /usr/share/squid/errors/Simplify_Chinese 即可顯示中文的錯誤提示。