设为首页 收藏本站
查看: 1637|回复: 0

[经验分享] 教你如何用Squid做CDN把公司做到上市

[复制链接]

尚未签到

发表于 2018-12-27 13:01:46 | 显示全部楼层 |阅读模式
  我们都知道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>  --enable-carp Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluster
  --enable-async-io=160 同步I/O 是squid 技术之一,用以提升存储性能。aufs 模块使用大量的线程执行磁盘I/O 操作。该代码仅仅工作在linux 和solaris 系统中。=N_THREADS 参数改变squid 使用的线程数量此处I/O是有瓶颈限制的
  --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/var
  chmod –R 777 /squid/var/logs
  chown -R squid:squid /data/cache1
  chown -R squid:squid /squid/var/logs

  6. 编辑squid配置文件
  rm –rf /squid/etc/squid.conf
  vi /squid/etc/squid.conf
  cache_peer 192.168.10.1 parent 8080 0 no-query round-robin max-conn=32 originserver name=ip
  cache_peer domain ip 192.168.10.1---此处我们还可以增加多个squid节点ip,用于负载均衡、动态内容分发与复制 - ---反向代理
  -----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 %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.10.1
  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 目录
  #l/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 进程。
  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的宣传,我们还是要知道其真实的面目,知道它是怎么一回事.


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656501-1-1.html 上篇帖子: snmp监控squid的配置 下篇帖子: linux中Squid-Graph的安装和配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表