標籤:des style http os 使用 io strong 檔案 for
Squid學習筆記
1、安裝前的配置
編譯安裝之前需要校正的參數主要包括File Descriptor和Mbuf Clusters。
1、File Descriptor
查看檔案描述符的限制數目:
ulimit –n
調整檔案描述符的數目需要3步:
step 1,編輯系統標頭檔/usr/include/bits/types.h
define __FD_SIZIEFD 8192
step 2,調整核心的FD限制數目
echo 8192 > /proc/sys/fs/file-max
step 3,修改當前shell環境的FD限制數目
ulimit –Hn 8192
2、Mbuf Clusters
3、調整臨時連接埠的範圍
Squid與Client串連的Local Port預設值為3128,與Server串連的Remote Port預設值為80。當Squid與原始伺服器建立串連時,系統會給本地socket分配一個連接埠號碼,這些連接埠號碼有特定的範圍限制。
echo “1024 40000” > /proc/sys/net/ipv4/ip_local_port_range
2、./configure指令碼的選項 configure指令碼的最終任務是創造Makefiles和其他檔案;在有些情況下可能需要重新運行configure指令碼,例如調整了核心參數,此時必須再次運行./configure以讓新的設定生效。在使用make命令重新編譯前,需要重運行configure指令碼,這通常有兩種方法:一是使用如下命令:config.status --recheck;二是使用命令touch config.status,它更新了該檔案的時間戳記。注意,如果要增加或刪除./configure選項,則必須重新敲入完整的命令列。 configure的常用選項:
--prefix=PREFIX:Squid的安裝目錄,預設值為/usr/local;
--localstatedir=DIR:var目錄的安裝位置,預設值為$prefix/var;
--sysconfdir=DIR:etc目錄的安裝位置,預設值為$prefix/etc;
--enable-dlmalloc[=LIB]:將Squid原始碼包中的dlmalloc包編譯和連結進來;
--enable-gnuregex:如有必要,啟用使用GNURegex;
--enable-carp:Cache數組路由協議(CARP)用來轉寄丟失的cache到父cache的數組或cluster;
--enable-async-io[=N_THREADS]:非同步I/O可以用來提升儲存效能。aufs模組使用大量的線程來執行磁碟I/O操作,N_THREADS參數改變Squid使用的線程數量。
--enable-async-io選項等同於如下三個選項:
--with-pthreads:在編譯過程中連結到系統的P線程庫,aufs儲存模組是Squid中唯一需要使用線程的部分。
--with-aufs-threads=N_THREADS:指定aufs儲存機制使用的線程數量。Squid會根據cache目錄的數量,自動計算需要使用多少線程。
--enable-storeio=ufs,aufs,diskd, coss, null:告訴Squid編譯時間使用哪個儲存模組,源碼中/src/fs下面有所有可用的儲存模組。ufs模組是預設的,它也是最穩定的,但缺點是效能比較有限。
--enable-removal-policies=heap,lru:排除策略是Squid需要騰出空間給新的cache目標時,用以排除舊目標的機制。LRU(least recently used)為預設值,它使用雙鏈表結構,GDS(greed dual size)和LFU(least frequently used)使用heap結構,注意,這種資料結構的實現並不是惟一的。
--enable-icmp:利用ICMP訊息來確定迴環時間(round-trip time),這類似於ping程式;
--enable-delay-pools:延時池,用來限制頻寬。該池由大量的用戶端IP地址組成,當來自這些用戶端的請求發生cache miss時,它們的響應將被人為的延遲。
--enable-usreagent-log:記錄來自用戶端請求訊息中user-agent的HTTP訊息頭;
--enable-referer-log:記錄來自用戶端請求訊息中referer的HTTP訊息頭;
--disable-wccp:Web cache協調協議(WCCP),用以攔截並分發HTTP請求到一個或多個caches。WCCP協議預設是啟用的,該選項可用阻止編譯WCCP代碼。
--enable-snmp:在編譯過程中編譯所有的SNMP相關的代碼,包括一個裁切版本的CMU SNMP庫;
--enable-cachemgr -hostname[=hostname]:cachemgr是一個用來對Squid進行查詢管理的CGI程式,hostname預設值為空白。
--enable-arp-acl:支援ARP或者以太地址、存取控制清單;
--enable-htcp:HTCP是超文本緩衝協議,一種類似於ICP的內部緩衝協議;
--enable-ssl:允許Squid終止SSL/TLS串連,僅對代理模式的加速請求有效;
--with-openssl[=DIR]:告訴Squid到哪裡找OpenSSL庫檔案和標頭檔;
--enable-cache-digests:Cache摘要是ICP的另一個可用的替代;
--enable-err-languages="lang1 lang2...":錯誤訊息需要安裝的語言,相應的語言檔案將複製到$prefix/share/errors中。如果不指定該選項,源包中所有可用的語言都會被安裝。
--enable-default-err-language=lang:錯誤訊息採用的預設語言,英語是預設值。
--with-coss-membuf-size=N:該選項設定coss緩衝目錄的記憶體緩衝大小,預設值是1MB。迴圈目標儲存系統(Cyclic Object Storage System, coss)是Squid的一種仍處於實驗性的儲存機制。
--enable-poll:強制使用poll()函數;
--desable-poll:不使用poll()函數;
--disable-http-violations:Squid預設是允許存在違反HTTP規範的配置,該選項可以完全禁止違背HTTP協議規範的代碼。
--enable-ipf-transparent:使用IP過濾器(filter)來輔助攔截緩衝。
--enable-pf-transparent:在那些使用PF包過濾器的作業系統上使用HTTP攔截,PF是標準的資料包過濾器(packet filter)。
--enable-linux-netfilter:Netfilter是PF的名字,如果要在linux 2.4或以後的版本中使用HTTP攔截功能,那麼啟用該選項。
--disable-ident-lookups:ident是一個簡單的協議,它允許伺服器尋找來自用戶端某條特定TCP串連的使用者名稱。
--disable-internal-dns:Squid源碼中包含了DNS兩種不同的實現,一個是內建的尋找(採用Squid自身對DNS的實現),一個是外部尋找(使用C庫gethostbyname()和gethostbyaddr()函數),預設使用前者。該選項將啟用外部尋找,並禁止內建的尋找。
--enable-truncate:truncate()系統調用是unlink()的替代品。unlink完全刪除cache檔案,而truncate將檔案大小設為零。有些人認為這種收回磁碟空間但卻留下目錄項的方法可用改善效能。
--disable-hostname-checks:預設的,Squid要求URL主機名稱遵守古老的RFC 1034規範,使用該選項可以移除這種限制。
--enable-underscores:允許主機名稱裡包含底線,但仍須考慮DNS解析程式可能會禁止主機名稱裡包含底線。
--enable-auth=basic,digest,ntlm:設定HTTP驗證機制;
--enable-basic-auth-helpers=LIST:將helpers/basic_auth目錄的一個或多個HTTP Basic驗證輔助程式編譯進來;
--enable-ntlm-auth-helpers=LIST:將helpers/ntlm_auth目錄的一個或多個HTTP NTLM驗證輔助程式編譯進來;
--enable-ntlm-fail-open:允許在有錯誤時訪問NTLM驗證模組。
--enable-digest-auth-modules=LIST:將helpers/digest_auth目錄的一個或多個HTTP Digest驗證輔助程式編譯進來;
--enable-external-acl-helpers=LIST:編譯一個或多個擴充ACL輔助程式;
--disable-unlinked:外部輔助進程,它對cache檔案執行unlink()或truncate()系統調用;我們認為通過在外部進程裡執行檔案刪除工作,能給Squid帶來明顯的效能提升;
--enable-stacktrace:如果Squid崩潰,資料追蹤資訊被寫到cache.log檔案;
--enable-x-accelerator-vary:在Squid被配置成代理時使用。它建議Squid在響應請求時,從後台原始伺服器中尋找X-Accelerator-Vary頭。
3、Squid的目錄結構
libexec:輔助程式,通常由其它程式啟動;
libexec/unlinked:從cache目錄裡刪除檔案;檔案刪除是Squid一個效能瓶頸,通過外部進程執行刪除操作可以提升效能。
libexec/cachemgr.cgi:Squid管理功能的CGI介面,需要拷貝到WEB伺服器的cgi-bin目錄;
libexec/diskd:如果指定了--enable-storeio=diskd時,該檔案才可見;
libexec/pinger:如果指定了--enable-icmp,該檔案才可見;
sbin:僅root可用的程式;
sbin/squid:squid的主程式;
bin:所有使用者都可用的程式;
bin/RunCache:啟動squid的指令碼;
bin/RunAccel:與RunCache幾乎一致,但增加另一個命令列參數,告訴squid在哪裡偵聽HTTP請求。
bin/squidclient:用來測試Squid的HTTP用戶端程式;例如:squidclient -m GET http://www.baidu.com > tmp.html
etc:設定檔;
etc/squid.conf:主設定檔;
etc/squid.conf.default:預設設定檔;
etc/mime.conf:告訴Squid對從FTP和Gopher伺服器擷取的資料使用何種MIME類型;
etc/mime.conf.default:預設mime檔案;
share:通常包含唯讀資料檔案;
share/mib.txt:SNMP管理管理資訊基礎(MIB)檔案,SNMP用戶端軟體(如snmpget和MRTG)需要該檔案;
share/icons:存放表徵圖;
share/errors:錯誤訊息模板;
var:包含了不是很重要的和經常變化的檔案,這些檔案也無需備份;
var/logs:記錄檔;
var/cache:緩衝目錄;
4、Squid的命令列選項
運行$prefix/squid/sbin/squid主程式時,可以指定一些選項,例如:
-h:查看協助資訊。
-v:查看版本資訊。
-a port:覆蓋squid.conf的http_port值(隻影響第一個)。
-u port:覆蓋squid.conf的icp_port值。
-d level:將調試訊息寫入stderr中,level指定需要寫入stderr中的訊息的最進階別,它遵循debug_options指令的設定。
-s:將cache.log訊息記錄系統日誌/etc/syslog;僅僅在debug層級0和1的訊息會被轉寄,層級0的訊息以syslog層級LOG_WARNING記錄,層級1的訊息以syslog層級LOG_NOTICE記錄。所有訊息使用LOCAL4的syslog裝置。
-f file:指定一個可選的設定檔。
-z:初始化cache和swap目錄,首次運行Squid時或新增了一個cache目錄時都必須使用該選項。
-N:讓Squid在前台終端運行,此時警告/錯誤訊息將直接列印在螢幕上(stderr);
-D:啟動squid時不進行DNS初始化測試;
-X:進入完整偵錯模式,即debug_options ALL 9;
-k function:function可以是reconfigure, rotate, shutdown, interrupt, kill, debug, check, parse等。其中reconfigure可以讓正在啟動並執行Squid程式重新載入設定檔;rotate讓記錄檔周期性滾動儲存;shutdown發送訊號給Squid關閉進程;interrupt立即關閉Squid;kill發送強行關閉KILL訊號給Squid(最終手段);debug將Squid轉為完整偵錯模式;check檢查Squid進程的狀態;parse解析squid.conf檔案,檢查配置是否正確。
例如:
squid -k debug; sleep 5; squid -k debug //獲得5秒的調試日誌資訊
5、squid.conf的常用配置指令
==網路參數配置==
http_port:Squid監聽用戶端HTTP請求的連接埠號碼,預設值為3128;
https_port:Squid監聽用戶端HTTPS請求的連接埠號碼,預設值443。
==日誌和cache目錄==
cache_dir:cache_dir scheme directory size L1 L2,設定cache目錄的參數,如儲存機制(預設值為ufs)和存放目錄(預設值為$prefix/var/cache)等。
logformat:按照需要指定日誌在記錄檔儲存的格式;
access_log:指定access.log的存放目錄,預設值為$prefix/var/logs。access.log主要記錄用戶端請求,如果不需要記錄,可以定義access_log /dev/null。
cache_log:指定cache.log的存放目錄,預設值為$prefix/var/logs。cache.log主要記錄squid的調試訊息等資訊。
cache_store_log:指定store.log的存放目錄,預設值為$prefix/var/logs。stroe.log記錄每一個進出cache的對象,如果不需要記錄,可以定義cache_store_log none。
debug_options:定義了squid功能模組的記錄層級,一般使用預設值debug_options ALL 1;
==配置緩衝大小的選項==
cache_mem:用於存放 In-Transit 對象(正在請求)、 Hot 對象(請求成功)和 Negative-Cached 對象(請求失敗),預設值是8M;
maximum_object_size_in_memory:超過這個值的對象不會緩衝在記憶體中,預設值是8KB;
memory_replacement_policy:當記憶體cahce空間不足時,進行對象替換的策略,lru是預設值;
cache_replacement_policy:磁碟緩衝替換策略,包括lru/gdsf/lfuda;lru是預設值;
minimum_object_size:低於這個值的對象不能被緩衝,預設值是0;
maximum_object_size:超過這個值的對象不能被緩衝,可以根據響應訊息中的content-length頭來判斷對象大小;如果響應中沒有content-length頭,則先寫入磁碟,再檢查對象大小,預設值是4096KB。
cache_swap_low:當cache目錄的使用率(百分比)超過該值時,會開始刪除舊對象以保證使用率不會超過該值;所以,當squid運行穩定後,cache目錄的使用率比較接近該值。預設值是90;
cache_swap_high:預設值是95;
==調整緩衝選項==
refresh_pattern:refresh_pattern -i regexp min percent max,間接控制磁碟緩衝,在cache命中率和確保資料的最新這兩個效能之間需要折衷。
quick_abort_min:如果用戶端中止請求,而資源的剩餘內容又小於16KB時,cache預設會繼續完成下載,quick_abort_min預設值為16KB;
quick_abort_max:如果用戶端中止請求,而資源的剩餘內容又大於16KB時,cache預設會取消下載,quick_abort_max預設值為16KB;
read_ahead_gap:發送到用戶端預取緩衝區的大小,預設值是17KB;
negative_ttl:定義了錯誤頁面(如“404 NOT FOUND”)的 Negative-Cached 緩衝時間(time_to_live);
positive_dns_ttl:DNS查詢成功的存留時間,預設6小時;
negative_dns_ttl:對失敗的DNS查詢進行negative caching對象存留時間。;
range_offset_limit:
request_header_max_size:指定請求的HTTP頭的最大大小;
request_body_max_size:指定HTTP請求的body部分的最大值;
collapsed_forwarding:當有多個相同的URI回源時,合并成一個請求處理。
==存取控制==
acl:定義存取控制清單(access control list),格式:acl aclname sr/dest ip/mask。
http_access:過濾client請求;格式:http_access allow/deny aclname。
http_reply_access:過濾Server回複;
icp_access:icp(Internet Cache Protocal)是sibling cache之間的通訊協定,該指令用來配置cache與其臨近的其他cache之間的存取控制機制。
reply_body_max_size:如果響應訊息的訊息體超過了該值,就立即刪除;
reply_header_max_size:響應訊息中得實體不能超過該值;
==逾時設定==
request_timeout:請求逾時;
persistent_request_timeout:長串連中兩個請求的最大間隔時間;
connect_timeout:連線逾時;
==其他項==
update_headers:在接收到304 Not Modified響應碼時,Squid預設會更新相關頭域,update_headers off 可以阻止這種特性;
via:關閉或開啟via頭,via頭用來記錄訊息在傳輸過程中經過的中間結點(如gateway、proxy、router等);
header_access:header_access allow/deny header_name,允許或禁止訪問某個頭域;
header_replace:被header_access拒絕的頭域的內容可以使用header_replace進行替換(預設是移除);
deny_info:當請求被訪問規過濾掉時,squid會顯示一個錯誤的頁面,這個配置項可以定義那個錯誤的頁面。
forwarded_for:Squid是否記錄它轉寄的請求中的hostname或IP地址,預設是開啟的。例如X-Forwarded-For: 192.1.2.3;
reload_into_ims:將no-cache或reload請求轉變為IMS請求(If-Modified-Since);
cachemgr_passwd:cache管理密碼;
cache_effective_user:設定運行Squid的有效賬戶;
cache_effective_group:設定有效使用者組;
visible_hostname:設定主機名稱;
==管理員參數配置==
cache_mgr:設定管理員郵箱,當Squid發生錯誤時將發送訊息到指定郵箱,如cache_mgr [email protected]
==Cache_peer選項==
cache/no_cache:cache allow/deny alcname,不緩衝指定的URL資源;
==外部支援方案的選項==
storeurl_rewrite_program:
storeurl_rewrite_children:
storeurl_rewrite_concurrency:
url_rewrite_program:
url_rewrite_children:
url_rewrite_concurrency:
url_rewrite_host_header:
==Delay pool 參數配置==
store_dir_select_algorithm:為緩衝對象選擇cache目錄的演算法,有least-load和round-robin兩種,前者是選擇負荷最小的目錄,後者是輪詢所有未滿的目錄。
minimum_expiry_time:(Expires - Date),最小緩衝時間;
vary_ignore_expire:
server_http11:在出口的請求中使用HTTP/1.1協議;
client_persistent_connections:用戶端是否支援長串連,預設是開啟的;
server_persistent_connections:伺服器端是否支援長串連,預設是開啟的;
ignore_ims_on_miss:
coredump_dir:
squid 學習筆記