用DNSPod和Squid打造自己的CDN (七) 配置Squid
第 7 章 配置Squid
1.設置hosts表
首先我們要明白一下squid在CDN中扮演的角色。squid在CDN中其實只是一個緩存。跟一般的服務器類似,squid代替用戶向真正有內容的服務器進行請求,并且緩存下來。所不同的是,squid是作為一個類似apache一樣的web服務器存在,用戶訪問的時候并不感覺到是訪問了一臺,而是一個真實的web服務器。一般情況下,我們把這種方式稱之為“反向”。
所以,我們需要讓squid知道內容要到哪里去取。因為我們已經把域名naizhao.com設置了智能DNS,而且這臺squid服務器也是網(wǎng)通的,按照正常的dns解析,會把naizhao.com解析為2.2.2.2這個IP(也就是網(wǎng)通機器本身)。但這個IP上面并不存在任何所需要的內容,所有需要的內容其實是在1.1.1.1上(源服務器)。所以我們需要為naizhao.com固定一個IP,也就是1.1.1.1。
讓系統(tǒng)得到這個IP的方法有兩種,一種是設置hosts表,另外一種是系統(tǒng)里面搭建一個dns服務器。Windows下大家應該會經常去編輯到hosts文件,linux下同樣也存在這個文件,我們在前面的vim教程中已經提到過。搭建dns系統(tǒng)這個方法工程太過龐大,還是編輯hosts文件相對來說比較簡單,所以我們就采用編輯hosts表的方法。
linux下面的hosts表位于/etc/hosts,格式跟Windows大致相同,打開后我們把下面一行加到末尾
1.1.1.1 naizhao.com www.naizhao.com cnc.naizhao.com
如果已經按照前面的教程,添加過1.1.1.1這條記錄的,修改為上面的樣子。
2.設置squid
squid的配置文件位于/usr/local/squid/etc/squid.conf,打開后會有英文的詳細說明。暫時我們不需要去理解這個文件里面各個配置的含義,相信大家看到一大堆英文都會頭大的。大家只需要知道如何把squid按照自己的需求跑起來,并且不出錯就好。
我們先用rm命令把squid.conf刪掉。不用怕刪掉后找不回來,還有一個默認的squid.conf.default在呢。一般的linux程序,包括apache等,都會有一個.default的默認文件,方便大家恢復默認設置,或者作為一個修改的參考。
squid.conf刪掉后,我們再用vi squid.conf,新建這個文件,然后把下面的內容帖進去,保存
http_port 80 vhost vport=80
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mem 1024 MB
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 256 KB
cache_dir ufs /var/spool/squid 20480 16 256
cache_swap_low 80
cache_swap_high 97
strip_query_terms off
request_body_max_size 5 MB
memory_pools on
memory_pools_limit 50 MB
access_log none
cache_log /var/log/squid/cache.log
cache_store_log none
pid_filename /var/run/squid.pid
hosts_file /etc/hosts
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i naizhao\.com 240 100% 1440 ignore-reload
refresh_pattern -i www\.naizhao\.com 240 100% 1440 ignore-reload
refresh_pattern -i .gif 180 20% 10080 override-expire ignore-reload reload-into-ims
refresh_pattern -i .jpg 180 20% 10080 override-expire ignore-reload reload-into-ims
refresh_pattern . 120 50% 1440
acl all src 0.0.0.0/0.0.0.0
acl p-manager proto cache_object
acl s-localhost src 127.0.0.1/255.255.255.255
acl d-localhost dst 127.0.0.0/8
acl d-domains dstdomain .naizhao.com
acl p-ssl port 443 563
acl p-safe port 80 443 563
acl m-conn method CONNECT
acl m-purge method PURGE
acl n-maxconn maxconn 15
http_access allow p-manager s-localhost
http_access allow m-purge
http_access deny !p-safe
http_access deny m-conn !p-ssl
http_access deny n-maxconn
http_access allow p-manager
http_access allow d-domains
http_access deny all
http_reply_access allow all
acl r-url urlpath_regex realtime
cache deny r-url
icp_access allow all
follow_x_forwarded_for allow all
acl_uses_indirect_client offrange_offset_limit -1
dns_timeout 2 seconds
forward_timeout 10 seconds
connect_timeout 10 seconds
peer_connect_timeout 6 seconds
read_timeout 10 seconds
request_timeout 6 seconds
persistent_request_timeout 16 seconds
cache_mgr silence.z@gmail.com
cache_effective_user nobody
cache_effective_group nobody
visible_hostname cnc.naizhao.com
logfile_rotate 0
always_direct allow all
error_directory /usr/local/squid/share/errors/Simplify_Chinese
coredump_dir /var/spool/squid
需要說明的幾個參數(shù):
cache_mem 1024 MB (squid使用的內存大小,注意必須要留下500M左右的內存給系統(tǒng)使用,建議系統(tǒng)內存2G,然后分配1G給squid)
cache_dir ufs /var/spool/squid 20480 16 256 (緩存的目錄,放在/var/spool/squid下面,大小是20G,第一級目錄是16個,第二級目錄是256個。因為一個目錄下面放置的文件和目錄數(shù)量有限制,所以這里必須要設置多個目錄,以適合squid存放大量文件的需要。目錄數(shù)千萬別設置太大,否則會引起系統(tǒng)死機)
memory_pools_limit 50 MB (內存池,用來存放緩存文件的鏈表,方便高速查找文件存放的對應位置,不需要太大。不懂就別管了)
cache_log /var/log/squid/cache.log(log文件的存放位置,必須要有讀寫權限,稍后說到)
refresh_pattern -i naizhao\.com 240 100% 1440 ignore-reload
refresh_pattern -i www\.naizhao\.com 240 100% 1440 ignore-reload
refresh_pattern -i .gif 180 20% 10080 override-expire ignore-reload reload-into-ims
refresh_pattern -i .jpg 180 20% 10080 override-expire ignore-reload reload-into-ims
(上面的幾行指定了文件緩存的時間,可以指定某個域名,也可以指定某個文件類型。有更加多的域名或者文件類型就按照需要添加吧。-i是忽略大小寫,naizhao.com和.gif是文件類型,240是最小緩存的時間,1440是最大緩存時間,都是分鐘。這些先不用管,有需要的時候調整就好了。我們的口號是:先跑起來)
acl d-domains dstdomain .naizhao.com(允許訪問的域名列表。如果要跑多個網(wǎng)站就添加多幾個,用空格分開。naizhao.com前面有個英文的.,表示所有*.naizhao.com都允許。如果沒有這個點,那么就只允許naizhao.com,訪問www.naizhao.com就會提示訪問被拒絕。)
cache_mgr silence.z@gmail.com (管理員的郵件地址,改為自己的)
cache_effective_user nobody
cache_effective_group nobody
(用來跑squid的用戶和用戶組。為了避免使用root帳號造成的不安全因素,大部分linux程序都會先用root運行,然后馬上把運行的用戶從root切換到其他用戶,這樣就算程序有漏洞被黑了,黑客也只能得到這個普通用戶的權限,對系統(tǒng)的危害將大大降低。保持默認即可)
visible_hostname cnc.naizhao.com (服務器輸出的機器名字,多臺squid分布的時候這個很重要,通過設置多個不同的名字,很容易就可以找出哪臺服務器有問題)
coredump_dir /var/spool/squid (squid掛掉后,臨終遺言要放到哪里。不用管,一般人看不懂)
修改好配置文件后,我們還需要做一些最后的工作。
先建一個log目錄,用來存放log文件。按照squid.conf的設置,我們輸入下面的命令
mkdir /var/log/squid
chown nobody:nobody /var/log/squid
chown命令是設置所有者和組。剛才說了,squid將會使用用戶nobody組nobody來運行。nobody:nobody冒號前面的是用戶,后面的是用戶組。
還有squid的緩存目錄,同樣需要設置權限為nobody:nobody
chown nobody:nobody /var/spool/squid
查看命令是否成功,可以使用ls -lh
ls -lh /var/spool/
……
drwxr-xr-x 3 nobody nobody 4.0K Jun 15 08:19 squid
剩下最后一步,初始化squid的緩存目錄結構。(也就是剛才說的16個一級目錄,256個二級目錄。本身這些文件夾不存在,需要通過squid的命令建立)
squid的命令在/usr/local/squid/sbin下,我們進入這個目錄,然后看看squid命令的幫助
./squid -h
Usage: squid [-hvzCDFNRYX] [-d level] [-s | -l facility] [-f config-file] [-u port] [-k signal]
-d level Write debugging to stderr also.
-f file Use given config-file instead of
/usr/local/squid/etc/squid.conf
-h Print help message.
-k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
Parse configuration file, then send signal to
running copy (except -k parse) and exit.
-s | -l facility
Enable logging to syslog.
-u port Specify ICP port number (default: 3130), disable with 0.
-v Print version.
-z Create swap directories
-C Do not catch fatal signals.
-D Disable initial DNS tests.
-F Don't serve any requests until store is rebuilt.
-N No daemon mode.
-R Do not set REUSEADDR on port.
-S Double-check swap during rebuild.
-X Force full debugging.
-Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
我們可以看到-z命令就是建立緩存目錄的,所以我們輸入
./squid -z
2007/07/07 07:52:03| Creating Swap Directories
沒有任何錯誤提示,說明目錄已經建立成功了,我們可以用 ls /var/spool/squid看看效果。
最后,我們讓squid跑起來
./squid -Nd 10
2007/07/07 07:53:50| Starting Squid Cache version 2.6.STABLE13 for i686-pc-linux-gnu...
2007/07/07 07:53:50| Process ID 3135
2007/07/07 07:53:50| With 1024 file descriptors available
2007/07/07 07:53:50| Using poll for the IO loop
2007/07/07 07:53:50| Performing DNS Tests...
2007/07/07 07:53:50| Successful DNS name lookup tests...
2007/07/07 07:53:50| DNS Socket created at 0.0.0.0, port 1026, FD 4
2007/07/07 07:53:50| Adding nameserver 211.147.6.3 from /etc/resolv.conf
2007/07/07 07:53:50| Adding nameserver 61.233.9.9 from /etc/resolv.conf
2007/07/07 07:53:50| Unlinkd pipe opened on FD 8
2007/07/07 07:53:50| Swap maxSize 20971520 KB, estimated 1613193 objects
2007/07/07 07:53:50| Target number of buckets: 80659
2007/07/07 07:53:50| Using 131072 Store buckets
2007/07/07 07:53:50| Max Mem size: 1048576 KB
2007/07/07 07:53:50| Max Swap size: 20971520 KB
2007/07/07 07:53:50| Store logging disabled
2007/07/07 07:53:50| Rebuilding storage in /var/spool/squid (DIRTY)
2007/07/07 07:53:50| Using Least Load store dir selection
2007/07/07 07:53:50| Set Current Directory to /var/spool/squid
2007/07/07 07:53:50| Loaded Icons.
2007/07/07 07:53:52| Accepting accelerated HTTP connections at 0.0.0.0, port 80, FD 7.
2007/07/07 07:53:52| Accepting ICP messages at 0.0.0.0, port 3130, FD 9.
2007/07/07 07:53:52| WCCP Disabled.
2007/07/07 07:53:52| Ready to serve requests.
2007/07/07 07:53:52| Done scanning /var/spool/squid (0 entries)
2007/07/07 07:53:52| Finished rebuilding storage from disk.
2007/07/07 07:53:52| 0 Entries scanned
2007/07/07 07:53:52| 0 Invalid entries.
2007/07/07 07:53:52| 0 With invalid flags.
2007/07/07 07:53:52| 0 Objects loaded.
2007/07/07 07:53:52| 0 Objects expired.
2007/07/07 07:53:52| 0 Objects cancelled.
2007/07/07 07:53:52| 0 Duplicate URLs purged.
2007/07/07 07:53:52| 0 Swapfile clashes avoided.
2007/07/07 07:53:52| Took 2.0 seconds ( 0.0 objects/sec).
2007/07/07 07:53:52| Beginning Validation Procedure
2007/07/07 07:53:52| Completed Validation Procedure
2007/07/07 07:53:52| Validated 0 Entries
2007/07/07 07:53:52| store_swap_size = 0k
2007/07/07 07:53:53| storeLateRelease: released 0 objects
打開瀏覽器,輸入http://2.2.2.2,會看到Access Denied的錯誤提示,說明squid已經正常跑起來了。
相關文章
centos 7中設置tomcat 7為系統(tǒng)服務的方法詳解
這篇文章主要給大家介紹了關于在centos 7中設置tomcat 7為系統(tǒng)服務的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編一起學習學習吧。2017-06-06Linux磁盤掛載、分區(qū)、擴容操作的實現(xiàn)方法
這篇文章主要介紹了Linux磁盤掛載、分區(qū)、擴容操作的實現(xiàn)方法,詳細的介紹了這些基礎概念及其實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Linux 使用init命令實現(xiàn)關機,重啟,切換模式
這篇文章主要介紹了Linux 使用init命令實現(xiàn)關機,重啟,切換模式的相關資料,需要的朋友可以參考下2017-03-03