我们都知道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
命令查看文件描述符
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解决方案,叫做“内部的”和“外部的”。内部查询是默认的,但某些人可能要使用外部技术。该选项禁止内部功能,转向使用旧的方式
给squid创建缓存目录并赋予相应的权限
mkdir  /data 
mkdir  /data/cache1
chmod –R 777 /data/cache1
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.hnhack.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
cache_mgr my@you.com  ----管理员账号
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 目录
#/squid/sbin/squid -z //初始化缓存空间
如果有错误提示,请检查你的 cache目录的权限。
2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。
#/squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
3,启动squid在后台运行。
#/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:/squid/bin/squidclient -p 80 -m PURGE http://www.hnhack.com/
 查命中率:
 /squid/bin/squidclient -h111.222.111.111 -p80 mgr:info
 /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也存在一定的局限性那就是它的实时性不太好,而且squid有限制不支持多核得cpu,这对于服务器得利用率不高,所以对于网络上CDN的宣传,我们还是要知道其真实的面目,知道它是怎么一回事.

教你用squid做CDN把公司做到上市的更多相关文章

  1. 文章如何做伪原创 SEO大神教你几招做"原创"网站文章的心得

    想要创作出好的文章并被百度所喜欢,就非常需要SEO的优化能力,以及要对文章进行塬创或伪塬创,那么,如何做伪塬创文章?以及如何做好塬创网站文章呢?对此,本文小编就为大家带来了几招做"塬创&qu ...

  2. 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)

    使用Squid做代理服务器 说到代理服务器,我们最先想到的可能是一些专门的代理服务器网站,某些情况下,通过它们能加快访问互联网的速度.其实,在需要访问外部的局域网中,我们自己就能设置代理,把访问次数较 ...

  3. kangle 默认支持ETag,如果是用kangle做源不会识别,但是做cdn或反向代理会自动识别

    kangle  默认支持ETag,如果是用kangle做源不会识别,但是做cdn或反向代理会自动识别

  4. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

  5. 手把手教你用C#做疫情传播仿真

    手把手教你用C#做疫情传播仿真 在上篇文章中,我介绍了用C#做的疫情传播仿真程序的使用和配置,演示了其运行效果,但没有着重讲其中的代码. 今天我将抽丝剥茧,手把手分析程序的架构,以及妙趣横生的细节. ...

  6. CDN百科第三讲 | 如果用了云服务器,还需要做CDN加速吗?

    在全站上云的背景下,云计算已经不仅仅是大型互联网公司的独享概念,正在被更多的传统企业.中小企业甚至个人站长所采用.在众多云计算服务中,最常见两个产品就是云服务器和CDN,今天的CDN百科第三讲,就给大 ...

  7. 8、公司的上市问题 - CEO之公司管理经验谈

    在公司发展到一定阶段之后,CEO就能够考虑公司上市的问题了.一条线路,就是先成立公司,进行投资,然后上市赚取利润,根据不同公司的总经理的想法不同而定.这条路是现在很多公司领导要求的做法.因为,通过发行 ...

  8. 手把手教你用FineBI做数据可视化

    前些日子公司引进了帆软商业智能FineBI,在接受了简单的培训后,发现这款商业智能软件用作可视分析只用一个词形容的话,那就是“轻盈灵动”!界面简洁.操作流畅,几个步骤就可以创建分析,获得想要的效果.此 ...

  9. 国内外比较出名的做MySQL的公司以及原因

      做MySQL比较出名的公司和原因 公司 原因 Oracle 名门正派 MariaDB 不断出MySQL新feature,功能比Oracle版的要多,更新速度快 Percona DBA工具出名 we ...

随机推荐

  1. asp.net生成word文档服务器配置

    一.asp.net生成word文档,布署到正式的服务器上就出现           错误:System.Runtime.InteropServices.COMException (0x800A1098 ...

  2. 这绝对是有史以来最详细的web前端学习路线

    定要善用开发者工具.firefox的firebug和Chrome的F12都是很好的选择,用好了这个必会发现他带给你的帮助比看一本书更多.你把firebug摸透了你还担心对DOM理解不够?考虑到未来,h ...

  3. git提交代码出现错误fatal: Unable to create '项目路径/.git/index.lock': File exists.

    git提交代码出现错误fatal: Unable to create '项目路径/.git/index.lock': File exists. 具体出错代码如下: 具体原因不详,在stackoverf ...

  4. Spfa【p3385】【模板】负环(spfa)

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述 毒瘤数据要求判负环 分析: 还是融合了不少题解的思想的. 负环定义: 权值和为负的环 //在网络上并没有找到一个官方定义,暂且这么理解. ...

  5. 每天一个Linux命令(10)cp命令

    cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文 ...

  6. luogu P2776 [SDOI2007]小组队列

    题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...

  7. MySQL命令show full processlist

    processlist命令的输出结果显示了有哪些线程在运行,可以检查当前数据库的运行状态,两种方式使用这个命令. 1 进入MySQL/bin目录下输入mysqladmin processlist; 2 ...

  8. 使用Chrome DevTools直接调试Node.js与JavaScript(并行)

    Good News: 现在我们可以用浏览器调试node.js了!!! 前提 Node.js 6.3+, 这个可上Node.js官网自行下载: Chrome 55+. 如果您本地的chrome升级到最新 ...

  9. linux命令详解:tr命令

    转:http://www.cnblogs.com/lwgdream/archive/2013/11/05/3407809.html 前言 通过tr命令来转化数据,比如大小写的转换:用转换成另外一种字符 ...

  10. 【Mybatis】未封装返回结果的字段自己返回值的问题

    在spring boot中使用mybatis过程中,发现有个实体的时间字段未在mapper方法执行完的封装结果中进行封装,但是却有值返回. 如下展示问题: 实体如下: package com.sxd. ...