Squid安装及详细配置

2012-12-07 17:49

Squid安装及详细配置

我们都知道CDN(内容分发网络)是用来给网站加速用的,通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络的“边缘”,使用户可以就近取得所需的内容,以提高用户访问网站的响应速度,目前国外的CDN技术已经是如火如荼,而国内也已经是异军突起,像网宿、帝联、cdn联盟、蓝汛等等纷纷加入到CDN的行列.那么到底CDN是通过什么技术来实现的呢?其实说白了目前国内众多CDN厂商都是使用软件技术—Squid也就是代理服务器的方式实现,其本身成本比较低、配置方便灵活.其内容服务模式是基于缓存服务器,也叫做代理缓存.主要的技术是网络负载均衡(多个squid代理服务器)、动态内容分发复制和缓存技术,简单的说当一个用户访问已经加入CDN服务(squid代理)的网站时,用户的请求并不直接发送到后端web服务器,而是发送到squid服务器(CDN中称节点),squid再根据本地的DNS记录向后端的目标web服务器发送请求,请求有响应并返回数据时squid会先将数据缓存一份到本地服务器上,然后返回结果给用户,当下一位客户访问相同的内容时直接从squid上返回结果而不经过后端web服务器,从而节约网站带宽,加速客户访问速度。下面的配置告诉你CDN是如何实现



1.       此处我们使用的是源代码包编译的方式安装,squid源代码包可以从以下站点下载

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

 
   

2.       在系统的根目录下我们创建一个名为squid的文件夹用作squid安装目录并进入此目录,将你下载好的源代码包放置于此目录,使用以下命令:

 
   
  1. mkdir /squid

  2. cd /squid

 
   

Squid安装及详细配置_第1张图片

3.       在开始编译安装之前我们还需要做些准备工作:

 
   
  1. service iptables stop -------停止iptables服务

  2. service httpd stop  ------停止httpd服务

 
   

安装squid所需要的组件

 
   
  1. yum y install gcc-c++net-snmp net-snmp-utils make

 
   

创建squid用户且此用户不能登陆系统

 
   
  1. useradd squid --"Squid user"-/dev/null -/sbin/nologin

 
   


文件描述符:文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix通常有一个系统级的限制。因为squid的工作方式,文件描述符的限制可能会极大的影响性能。当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket被关闭,squid不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。在运行./configure之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024个文件描述符足够了。非常忙的cache可能需要4096或更多。命令查看文件描述符

 
   
  1. ulimit -n unlimited

  2. ulimit -n

  3. 1048576

 
   

ulimit -HSn 1048576 -----设置文件描述符,此处我们设置的文件描述符是1048576


4.       编译配置squid

进入目录

 
   
  1. cd /squid

 
   

使用命令

 
   
  1. tar-zxvf /squid/squid-2.7.STABLE9.tar.gz

 
   解压源代码包,解压后生成目录squid-2.7. STABLE9 
   

cd squid-2.7. STABLE9

Squid安装及详细配置_第2张图片

开始编译安装,使用命令:

 
   
  1. ./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

  2. make

  3. make install

 
   

Squid安装及详细配置_第3张图片

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创建缓存目录并赋予相应的权限

 
   
  1. mkdir  /data

  2. mkdir  /data/cache1

  3. chmod 777/data/cache1

  4. chmod 777/squid

  5. chmod 777/squid/var/

  6. chmod 777/squid/var/logs/

  7. chown -R squid:squid /data/cache1

  8. chown -R squid:squid /squid/var/logs

 
   Squid安装及详细配置_第4张图片 
   


5.       编辑squid配置文件

 
   
  1. rm rf /squid/etc/squid.conf

  2. vi /squid/etc/squid.conf

  3.  

  4. cache_peer 192.168.1.30parent 80800no-query round-robin max-conn=32originserver name=ip

  5. cache_peer_domain ip 192.168.1.30此处还可增加多个squid节点IP,用于负载均衡、动态内容分发与复制

  6. ------反向代理语法cache_peer Web服务器地址服务器类型http端口

  7. ------ACL访问控制列表-----

  8. acl all src 0.0.0.0/0.0.0.0

  9. acl manager proto cache_object

  10. acl localhost src 127.0.0.1/255.255.255.255

  11. acl to_localhost dst 127.0.0.0/8

  12. acl SSL_ports port 443563

  13. acl Safe_portsport 80# http

  14. acl Safe_portsport 800# http1

  15. acl Safe_portsport 21# ftp

  16. acl Safe_portsport 443563# https, snews

  17. acl Safe_portsport 70# gopher

  18. acl Safe_portsport 210# wais

  19. acl Safe_portsport 1025-65535# unregistered ports

  20. acl Safe_portsport 280# http-mgmt

  21. acl Safe_portsport 488# gss-http

  22. acl Safe_portsport 591# filemaker

  23. acl Safe_portsport 777# multiling http

  24. acl CONNECT method CONNECT

  25. acl monitor src 192.168.1.0/255.255.255.0127.0.0.1

  26. acl 789789referer_regex -789789

  27.  

  28. http_access deny 789789

  29. deny_info http://www.789789.com/789789

  30.  

  31.  

  32. #http_access allow manager 

  33. http_access allow manager monitor

  34. http_access deny manager

  35. acl PURGE method PURGE

  36. http_access allow PURGE localhost

  37. http_access deny purge

  38. acl snmppublic snmp_community public

  39. snmp_access allow snmppublic all

  40. http_access deny !Safe_ports

  41. http_access deny CONNECT !SSL_ports

  42. ############################## Device Configuration Define #################################

  43. visible_hostname hnhack     ------可见主机名

  44. cache_dir aufs /data/cache1/2600001282-----定义缓存目录数据存储格式缓存到的目录为缓存目录分配的磁盘空间(MB)缓存空间的一级子目录个数二级子目录个数

  45.  

  46. maximum_object_size 2048KB  -----最大缓存对象大小

  47. minimum_object_size 0KB       -----最小缓存对象大小

  48. store_dir_select_algorithm round-robin

  49. cache_replacement_policy lru

  50. cache_swap_low 90

  51. cache_swap_high 95

  52. reload_into_ims on

  53. via off

  54. refresh_stale_hit 0minute

  55. vary_ignore_expire on

  56. request_timeout 30seconds

  57. persistent_request_timeout 10seconds

  58. connect_timeout 30seconds

  59. read_timeout 10minutes

  60. server_persistent_connections off

  61. client_persistent_connections off

  62. collapsed_forwarding on

  63. maximum_object_size_in_memory 8KB

  64. cache_mem 1024MB   -----缓存所占内存空间大小

  65. memory_replacement_policy lru

  66. logformat squid_custom_log %ts.%03tu%6tr%>%Ss/%03Hs%<st %rm %ru  %un %Sh/%<%mt "%{Referer}>h""%{User-Agent}>h"%{Cookie}>h

  67. #cache_access_log /squid/var/logs/access.log squid_custom_log

  68. cache_access_log none

  69. strip_query_terms off

  70. logfile_rotate 0

  71. #cache_log /data/proclog/log/squid/cache.log

  72. cache_store_log none

  73. http_port 80accel vhost vport allow-direct   -----指定squid监听HTTP请求的端口,一般都设置成80端口,

  74. 这样使用户感觉不到反向代理的存在,就像访问真正的WEB服务器一样。设定squidaccel加速模式,vhost必须要加.

  75. 否则将无法将主机头转发至后端服务器,访问时就会出现无法找到主机头的错误此处就为加入到CDN服务的网站起加速作用

  76. icp_port 0

  77. snmp_port 3401

  78. cache_effective_user squid   -----squid用户及用户组

  79. cache_effective_group squid

  80. pid_filename /var/run/squid.pid  -----squid进程名

  81. diskd_program /squid/libexec/diskd

  82. unlinkd_program /squid/libexec/unlinkd

  83. half_closed_clients off

  84. hosts_file /squid/etc/hosts

  85. dns_children 3

  86. dns_testnames 127.0.0.1

  87.  

  88. client_db off

  89. cachemgr_passwd test4squid config

  90. cache_mgrmy@you.com  ----管理员账号

  91. quick_abort_min -1KB

  92. range_offset_limit -1KB

  93. refresh_pattern -^http://50%5ignore-reload override-lastmod

  94. refresh_pattern -i \.htm$ 50%5ignore-reload override-lastmod

  95. refresh_pattern -i \.html$ 50%5ignore-reload override-lastmod

  96. refresh_pattern -i \.bmp$ 50%5ignore-reload override-lastmod

  97. refresh_pattern -i \.gif$ 50%5ignore-reload override-lastmod

  98. refresh_pattern -i \.jpg$ 50%5ignore-reload override-lastmod

  99. refresh_pattern -i \.jpeg$ 50%5ignore-reload override-lastmod

  100. refresh_pattern -i \.png$ 50%5ignore-reload override-lastmod

  101. refresh_pattern -i \.js$ 50%5ignore-reload override-lastmod

  102. refresh_pattern -i \.swf$ 50%5ignore-reload override-lastmod

  103. refresh_pattern -i \.css$ 50%5ignore-reload override-lastmod

  104. refresh_pattern -i \.xml$ 50%5ignore-reload override-lastmod

  105. refresh_pattern -i \.yaml$ 300%30ignore-reload override-lastmod

  106. refresh_pattern -i \.text$ 50%5ignore-reload override-lastmod

  107. refresh_pattern -i \.ico$ 14400%1440ignore-reload override-lastmod

  108.  

  109. acl QUERY urlpath_regex cgi-bin\? \.php

  110.  

  111. cache deny QUERY

  112. acl LocalServersdst 192.168.1.30

  113. no_cache deny LocalServers

 
   
 
   
  1. 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安装及详细配置_第5张图片

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

Squid相关的命令

结束squid进程/squid/sbin/squid –k shutdown

取得squid运行状态信息:

 
   
  1. /squid/bin/squidclient -80mgr:info

 
   

取得squid内存使用情况:

 
   
  1. /squid/bin/squidclient -80mgr:mem

 
   

取得squid已经缓存的列表:

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

 
   

取得squid的磁盘使用情况:

 
   
  1. /squid/bin/squidclient -80mgr:diskd

 
   

强制更新某个url:

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

 
   

查命中率:

 
   
  1. /soft/squid/bin/squidclient -h111.222.111.111-p80 mgr:info

  2. /soft/squid/bin/squidclient -h具体的IP -p80 mgr:info

 
   


8.将squid写入启动脚本,随计算机每次启动而自启动

 
   
  1. vi /etc/rc.local添加一行

  2. /squid/sbin/squid -s

 
   

网络安全选项的调整:

 
   
  1. echo 1>/proc/sys/net/ipv4/tcp_syncookies

  2. echo 1>/proc/sys/net/ipv4/tcp_synack_retries

  3. echo 1>/proc/sys/net/ipv4/tcp_syn_retries

 
   

编辑iptables配置文件,禁止ping

 
   
  1. *filter

  2. :INPUT ACCEPT [1:229]

  3. :FORWARD ACCEPT [0:0]

  4. :OUTPUT ACCEPT [0:0]

  5. -A INPUT -p icmp -m icmp --icmp-type 8-j DROP

  6. COMMIT

 
   

保存退出,重新启动iptables服务

  1. Service iptables save

  2. Service iptables restart


通过我上面的详细地解读,您应该知道了CDN并不是多么的神秘,而且CDN也存在一定的局限性那就是它的实时性不太好,所以对于网络上CDN的宣传,我们还是要知道其真实的面目,知道它是怎么一回事.


你可能感兴趣的:(linux)