利用DNSPOD+SQUID搭建自己的CDN服务器
A服务器
域名:upcto.com
两台服务器:
电信服务器为A,作为内容服务器,源服务器
A的服务器IP是217.60.65.62
B服务器
网通服务器为B,作为CDN服务器,节点服务器。所需要的内容都从A服务器获取。
B服务器的IP是117.41.85.76
实现项
电信用户访问A,www.upcto.com
网通用户访问B,nc.upcto.com
用户只需要输入www.upcto.com,智能DNS就可以判断用户需要访问哪一个。
DNSPOD设置
DNSPOD采用A记录
主机记录 记录类型 线路类型 记录值
WWW A 电信 217.60.65.62
WWW A 网通 117.41.85.76
编译前准备
/usr/include/bits/posix_types.h
/usr/include/linux/typesizes.h
将define_FD_SETSIZE 1024修改为 65535
运行以下命令
ulimit -Hs 65535
ulimit -n 65535
下载squid源码
wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE13.tar.gz
通过cat /proc/cpuinfo得到CPU信息
在configure之前,我们必须先设置cflags
export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"
设置完毕之后,通过env命令查看是否设置成功
编译squid
CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/squid --enable-follow-x-forwarded-for --enable-storeio=aufs,ufs --with-maxfd=65535 --with-pthreads --enable-dlmalloc --enable-poll --enable-stacktraces --enable-removal-policies=heap,lru --enable-delay-pools
make&& make install
设置hosts
linux下面的hosts表位于/etc/hosts
218.64.65.162 upcto.com www.upcto.com cdn.upcto.com
设置squid
squid的配置文件位于/usr/local/squid/etc/squid.conf
rm命令把squid.conf删掉
squid.conf删掉后,我们再用vim 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 upcto\.com 240 100% 1440 ignore-reload
refresh_pattern -i www\.upcto\.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 .upcto.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 xzszxiong@163.com
cache_effective_user nobody
cache_effective_group nobody
visible_hostname cdn.upcto.com
logfile_rotate 0
always_direct allow all
error_directory /usr/local/squid/share/errors/Simplify_Chinese
coredump_dir /var/spool/squid
修改好配置文件后,我们还需要做一些最后的工作。
先建一个log目录,用来存放log文件。按照squid.conf的设置,我们输入下面的命令
mkdir /var/log/squid
mkdir /var/spool/squid 缓存目录
chown nobody:nobody /var/log/squid
chown nobody:nobody /var/spool/squid
查看命令是否成功,可以使用ls -lh
ls -lh /var/spool/
剩下最后一步,初始化squid的缓存目录结构。(也就是刚才说的16个一级目录,256个二级目录。本身这些文件夹不存在,需要通过squid的命令建立)
squid的命令在/usr/local/squid/sbin下,我们进入这个目录,然后看看squid命令的帮助
我们可以看到-z命令就是建立缓存目录的,所以我们输入
./squid -z
没有任何错误提示,说明目录已经建立成功了,我们可以用 ls /var/spool/squid看看效果。
最后,我们让squid跑起来
./squid -Nd 10
curl -I http://www.upcto.com/
client端的hosts配置如下
127.0.0.1 cdn.upcto.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
218.64.65.162 upcto.com www.upcto.com
最后正式运行
ulimit -Hs 65535
ulimit -n 65535
./squid
随系统启动
在/etc/rc.local加上
ulimit -Hs 65535
ulimit -n 65535
/usr/local/squid/sbin/squid