我們來自五湖四海,不為別的,只因有共同的愛好,為中國互聯網發展出一分力!

Squid安裝及詳細配置

2012年07月02日20:31 閱讀: 50398 次

標簽: 安裝, squid, 詳細配置, CDN服務, squid代理, 實現原理

我們都知道CDN(內容分發網絡)是用來給網站加速用的,通過在現有的Internet中增加一層新的網絡架構,將網站的內容發布到最接近用戶的網絡的“邊緣”,使用戶可以就近取得所需的內容,以提高用戶訪問網站的響應速度,目前國外的CDN技術已經是如火如荼,而國內也已經是異軍突起,像網宿、帝聯、cdn聯盟、藍汛等等紛紛加入到CDN的行列.那么到底CDN是通過什么技術來實現的呢?其實說白了目前國內眾多CDN廠商都是使用軟件技術—Squid也就是代理服務器的方式實現,其本身成本比較低、配置方便靈活.其內容服務模式是基于緩存服務器,也叫做代理緩存.主要的技術是網絡負載均衡(多個squid代理服務器)、動態內容分發復制和緩存技術,簡單的說當一個用戶訪問已經加入CDN服務(squid代理)的網站時,用戶的請求并不直接發送到后端web服務器,而是發送到squid服務器(CDN中稱節點),squid再根據本地的DNS記錄向后端的目標web服務器發送請求,請求有響應并返回數據時squid會先將數據緩存一份到本地服務器上,然后返回結果給用戶,當下一位客戶訪問相同的內容時直接從squid上返回結果而不經過后端web服務器,從而節約網站帶寬,加速客戶訪問速度。下面的配置告訴你CDN是如何實現



1.       此處我們使用的是源代碼包編譯的方式安裝,squid源代碼包可以從以下站點下載

http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz    

2.       在系統的根目錄下我們創建一個名為squid的文件夾用作squid安裝目錄并進入此目錄,將你下載好的源代碼包放置于此目錄,使用以下命令:

mkdir /squid
cd /squid

3.       在開始編譯安裝之前我們還需要做些準備工作:

service iptables stop -------停止iptables服務
service httpd stop  ------停止httpd服務

安裝squid所需要的組件

yum –y install gcc-c++ net-snmp net-snmp-utils make

創建squid用戶且此用戶不能登陸系統

useradd squid -M -c "Squid user" -d /dev/null -s /sbin/nologin


文件描述符:文件描述符是一個簡單的整數,用以標明每一個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。Unix操作系統通常給每個進程能打開的文件數量強加一個限制。更甚的是,unix通常有一個系統級的限制。因為squid的工作方式,文件描述符的限制可能會極大的影響性能。當squid用完所有的文件描述符后,它不能接收用戶新的連接。也就是說,用完文件描述符導致拒絕服務。直到一部分當前請求完成,相應的文件和socket被關閉,squid不能接收新請求。當squid發現文件描述符短缺時,它會發布警告。在運行./configure之前,檢查你的系統的文件描述符限制是否合適,能給你避免一些麻煩。大多數情況下,1024個文件描述符足夠了。非常忙的cache可能需要4096或更多。命令查看文件描述符

ulimit -n unlimited
ulimit -n
1048576

ulimit -HSn 1048576 -----設置文件描述符,此處我們設置的文件描述符是1048576


4.       編譯配置squid

進入目錄

cd /squid

使用命令

tar-zxvf /squid/squid-2.7.STABLE9.tar.gz
解壓源代碼包,解壓后生成目錄squid-2.7. STABLE9

cd squid-2.7. STABLE9

開始編譯安裝,使用命令:

./configure --enable-kill-parent-hack --enable-large-cache-files --with-large-files --with-maxfd=344800 --enable-snmp --disable-ident-lookups --enable-carp --enable-async-io=160 --enable-storeio=ufs,aufs,diskd,null,coss --enable-epoll --enable-linux-netfilter --enable-stacktraces --enable-forward-log --enable-referer-log --enable-useragent-log --enable-delay-pools --enable-follow-x-forwarded-for --enable-forw-via-db --enable-default-err-language=Simplify_Chinese --enable-err-languages="Simplify_Chinese English" --without-system-md5 --disable-internal-dns --prefix=/squid
make
make install

Configure選項

--prefix=/squid這里為squid的安裝目錄

--enable-kill-parent-hack關掉squid進程時連同父進程也一起關掉(enable表示開啟此項功能,disable則表示關閉)

--enable-large-cache-files支持大的緩存文件

--with-large-files支持大的文件

--with-maxfd=344800覆蓋的最大數量的filedescriptors

--enable-snmp簡單網絡管理協議(SNMP)是監視網絡設備和服務器的流行方法。該選項導致編譯過程去編譯所有的SNMP相關的代碼,包括一個裁切版本的CMU SNMP庫

--disable-ident-lookups ident是一個簡單的協議允許服務器利用客戶端的特殊TCP連接來發現用戶

--enable-carp  Cache數組路由協議(CARP)用來轉發丟失的cache到父cache的數組或cluster

--enable-async-io=160同步I/O是squid技術之一,用以提升存儲性能。aufs模塊使用大量的線程來執行磁盤I/O操作。該代碼僅僅工作在linux和solaris系統中。=N_THREADS參數改變squid使用的線程數量 此處Io是有瓶頸限制的

----enable-storeio=ufs,aufs,diskd,null,coss Squid支持大量的不同存儲模塊。通過使用該選項,你告訴squid編譯時使用哪個模塊

--enable-epoll支持epoll的IO模式,2.6以上內核才具有

--enable-linux-netfilter netfilter是linux內核的包過濾器的名字

--enable-stacktraces某些系統支持在程序崩潰時,自動產生數據追蹤。當你激活該功能后,如果squid崩潰,數據追蹤信息被寫到cache.log文件。這些信息對開發和程序bug調試有用

--enable-forward-log支持實驗forward-log指令

--enable-referer-log該選項激活來自客戶請求的HTTP referer日志

--enable-useragent-log該選項激活來自客戶請求的HTTP用戶代理頭的日志

--enable-delay-pools延時池是squid用于傳輸形狀或帶寬限制的技術。該池由大量的客戶端IP地址組成。當來自這些客戶端的請求處于cache丟失狀態,他們的響應可能被人工延遲

--enable-follow-x-forwarded-for當一個請求被另一些代理服務器轉發時通過從http頭中尋找X-Forwarded-For來發現直接或間接的客戶端的IP地址

--enable-forw-via-db 支持forw/via數據庫

--enable-default-err-language=Simplify_Chinese 該選項設置error_directory指令的默認值

--enable-err-languages="Simplify_Chinese English" squid支持定制錯誤消息,錯誤消息可以用多種語言報告。該選項指定復制到安裝目錄($prefix/share/errors)的語言

--without-system-md5不使用md5加密算法

--disable-internal-dns squid源代碼包含兩個不同的DNS解決方案,叫做“內部的”和“外部的”。內部查詢是默認的,但某些人可能要使用外部技術。該選項禁止內部功能,轉向使用舊的方式



5.給squid創建緩存目錄并賦予相應的權限

mkdir  /data
mkdir  /data/cache1
chmod –R 777 /data/cache1
chmod –R 777 /squid
chmod –R 777 /squid/var/
chmod –R 777 /squid/var/logs/
chown -R squid:squid /data/cache1
chown -R squid:squid /squid/var/logs


5.       編輯squid配置文件

rm –rf /squid/etc/squid.conf
vi /squid/etc/squid.conf

cache_peer 192.168.1.30 parent 8080 0 no-query round-robin max-conn=32 originserver name=ip
cache_peer_domain ip 192.168.1.30此處還可增加多個squid節點IP,用于負載均衡、動態內容分發與復制
------反向代理語法cache_peer Web服務器地址服務器類型http端口
------ACL訪問控制列表-----
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 800         # http1
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
acl monitor src 192.168.1.0/255.255.255.0 127.0.0.1
acl 789789 referer_regex -i 789789

http_access deny 789789
deny_info http://www.789789.com/  789789


#http_access allow manager 
http_access allow manager monitor
http_access deny manager
acl PURGE method PURGE
http_access allow PURGE localhost
http_access deny purge
acl snmppublic snmp_community public
snmp_access allow snmppublic all
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
############################## Device Configuration Define #################################
visible_hostname hnhack     ------可見主機名
cache_dir aufs /data/cache1/ 260000 128 2   -----定義緩存目錄數據存儲格式緩存到的目錄為緩存目錄分配的磁盤空間(MB)緩存空間的一級子目錄個數二級子目錄個數

maximum_object_size 2048 KB  -----最大緩存對象大小
minimum_object_size 0 KB       -----最小緩存對象大小
store_dir_select_algorithm round-robin
cache_replacement_policy lru
cache_swap_low 90
cache_swap_high 95
reload_into_ims on
via off
refresh_stale_hit 0 minute
vary_ignore_expire on
request_timeout 30 seconds
persistent_request_timeout 10 seconds
connect_timeout 30 seconds
read_timeout 10 minutes
server_persistent_connections off
client_persistent_connections off
collapsed_forwarding on
maximum_object_size_in_memory 8 KB
cache_mem 1024 MB   -----緩存所占內存空間大小
memory_replacement_policy lru
logformat squid_custom_log %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru  %un %Sh/%<A %mt "%{Referer}>h" "%{User-Agent}>h" %{Cookie}>h
#cache_access_log /squid/var/logs/access.log squid_custom_log
cache_access_log none
strip_query_terms off
logfile_rotate 0
#cache_log /data/proclog/log/squid/cache.log
cache_store_log none
http_port 80 accel vhost vport allow-direct   -----指定squid監聽HTTP請求的端口,一般都設置成80端口,
這樣使用戶感覺不到反向代理的存在,就像訪問真正的WEB服務器一樣。設定squid為accel加速模式,vhost必須要加.
否則將無法將主機頭轉發至后端服務器,訪問時就會出現無法找到主機頭的錯誤此處就為加入到CDN服務的網站起加速作用
icp_port 0
snmp_port 3401
cache_effective_user squid   -----squid用戶及用戶組
cache_effective_group squid
pid_filename /var/run/squid.pid  -----squid進程名
diskd_program /squid/libexec/diskd
unlinkd_program /squid/libexec/unlinkd
half_closed_clients off
hosts_file /squid/etc/hosts
dns_children 3
dns_testnames 127.0.0.1

client_db off
cachemgr_passwd test4squid config
[email protected]  ----管理員賬號
quick_abort_min -1 KB
range_offset_limit -1 KB
refresh_pattern -i ^http:// 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.htm$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.html$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.bmp$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.gif$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.jpg$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.jpeg$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.png$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.js$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.swf$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.css$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.xml$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.yaml$ 30 0% 30 ignore-reload override-lastmod
refresh_pattern -i \.text$ 5 0% 5 ignore-reload override-lastmod
refresh_pattern -i \.ico$ 1440 0% 1440 ignore-reload override-lastmod

acl QUERY urlpath_regex cgi-bin\? \.php

cache deny QUERY
acl LocalServers dst 192.168.1.30
no_cache deny LocalServers

vi  /squid/etc/hosts
文件添加DNS記錄

x.x.x.x www.x.com  注意此處的DNS記錄為本地DNS記錄,記錄加入到CDN服務的網站,用于squid代理服務器快速尋找目標網站

7.Squid常用命令

1,初始化你在squid.conf里配置的cache目錄
#/usr/local/squid/sbin/squid -z //初始化緩存空間
如果有錯誤提示,請檢查你的cache目錄的權限。
2,對你的squid.conf排錯,即驗證squid.conf的語法和配置。
#/usr/local/squid/sbin/squid -k parse
如果squid.conf有語法或配置錯誤,這里會返回提示你,如果沒有返回,恭喜,可以嘗試啟動squid。
3,啟動squid在后臺運行。
#/usr/local/squid/sbin/squid -s
這時候可以ps -A來查看系統進程,可以看到倆個squid進程。 查看squid進程看是否啟動

ps aux |grep squid

如配置文件有更改,需使用命令/squid/sbin/squid –k reconfigure重新加載配置文件

Squid相關的命令

結束squid進程/squid/sbin/squid –k shutdown

取得squid運行狀態信息:

/squid/bin/squidclient -p 80 mgr:info

取得squid內存使用情況:

/squid/bin/squidclient -p 80 mgr:mem

取得squid已經緩存的列表:

/squid/bin/squidclient -p 80 mgrbjects. use it carefully,it may crash

取得squid的磁盤使用情況:

/squid/bin/squidclient -p 80 mgr:diskd

強制更新某個url:

/soft/squid/bin/squidclient -p 80 -m PURGE http://www.celue.ca/

查命中率:

/soft/squid/bin/squidclient -h111.222.111.111 -p80 mgr:info
/soft/squid/bin/squidclient -h具體的IP -p80 mgr:info


8.將squid寫入啟動腳本,隨計算機每次啟動而自啟動

vi /etc/rc.local添加一行
/squid/sbin/squid -s

網絡安全選項的調整:

echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_synack_retries
echo 1 > /proc/sys/net/ipv4/tcp_syn_retries

編輯iptables配置文件,禁止ping

*filter
:INPUT ACCEPT [1:229]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
COMMIT

保存退出,重新啟動iptables服務

Service iptables save
Service iptables restart


通過我上面的詳細地解讀,您應該知道了CDN并不是多么的神秘,而且CDN也存在一定的局限性那就是它的實時性不太好,所以對于網絡上CDN的宣傳,我們還是要知道其真實的面目,知道它是怎么一回事.




分享到: 更多
藍客門戶
©2001-2019 中國藍客聯盟 版權所有.
關于藍客聯盟歷史宗旨章程技術服務聯系我們藍客社區

女校剑道部闯关