squid介绍、配置、应用

       squid介绍及其简单配置

1Squid是什么?

  Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人

们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想

下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如

http//squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据

到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地

从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTPFT

PGOPHERSSLWAIS等协议。但它不能处理如POPNNTPRealAudio以及其它类型的东西。

2.squid代理的作用:

 

 

3 接下来我们主要探讨的是squid各种代理的定义

正向代理

a  标准的代理缓冲服务器

  一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

 

 b  透明代理缓冲服务器

  透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISPInternet服务器提供商)特别有用。

 

反向代理:

 a.  反向代理缓冲服务器

  反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

 

4 Squid 主要组成部分

   服务名:squid

   主程序:/usr/sbin/squid

   配置目录:/etc/squid

   主配文件:/etc/squid/squid.conf

   监听tcp端口号:3128

默认访问日志文件:/var/log/squid/access.log

5.squid 常用配置选项(/etc/squid/squid.conf)

     http_port 3128 (还可以只监听一个一个ip  http_port 192.168.0.1:3128)

         cache_mem 64MB         #缓存占内存大小

         maximum_object_size 4096KB            #最大缓存块

         reply_body_max_size  1024000 allow all  #限定下载文件大小

         access_log /var/log/squid/access.log   #访问日志存放的文件

         visible_hostname  proxy.test.xom  #可见的主机名

         cache_dir ufs /var/spool/squid 100 16 256

         usf:缓存数据的存储格式

                /var/spool/squid 缓存目录

                100 : 缓存目录占磁盘空间大小(M

                16 :缓存空间一级子目录个数

                256 :缓存空间二级子目录个数

         cache_mgr  [email protected]   #定义管理员邮箱

     http_access deny all   #访问控制

 

6.squid中的访问控制

  使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。 Squid 访问控制有两个要素:ACL 元素和 访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。

  

  下面列出一些重要的 ACL 元素类型

  

  * src : 源地址 (即客户机IP地址)

  * dst : 目标地址 (即服务器IP地址)

  * srcdomain : 源名称 (即客户机名称)

  * dstdomain : 目标名称 (即服务器名称)

  * time : 一天中的时刻和一周内的一天

  * url_regex : URL 规则表达式匹配

  * urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名

  * proxy_auth : 通过外部程序进行用户验证

  * maxconn : 单一 IP 的最大连接数

  

  为了使用控制功能,必须先设置 ACL 规则并应用。ACL 声明的格式如下:

  

  acl acl_element_name type_of_acl_element values_to_acl

  注:

  1. acl_element_name 可以是任一个在 ACL 中定义的名称。

  2. 任何两个 ACL 元素不能用相同的名字。

  3. 每个 ACL 由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一 ACL bbs.bitsCN.com

  元素的值被匹配,则这个 ACL 元素即被匹配。

  4. 并不是所有的 ACL 元素都能使用访问列表中的全部类型。

  5. 不同的 ACL 元素写在不同行中,Squid 将把它们组合在一个列表中。

  

  我们可以使用许多不同的访问条目。下面列出我们将要用到的几个:

  * http_access: 允许 HTTP 访问。这个是主要的访问控制条目。

  * no_cache: 定义对缓存请求的响应。

  

  访问列表的规则由一些类似 'allow'  'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL元素提供服务。

  注: 

  1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。

  2. 一个访问列表可以又多条规则组成。

  3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。

  4. 一个访问条目中的所有元素将用逻辑与运算连接:

  http_access Action 声明1 AND 声明2 AND 声明 OR.

  http_access Action 声明3

  多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。

  5. 请记住列表中的规则总是遵循由上而下的顺序。

7 好了介绍了那么多下面我们来对squid几种代理进行简单配置:

     标准的代理缓冲服务器的配置:

      a.squid服务器上的配置

         准备环境:软件包:squid(任意版本)

                双网卡:eth0:192.168.1.1 eth1:10.106.34.12

           如图:

 

 

         vim /etc/squid/squid.conf

                http_port 192.168.1.12:3128 (可写多个)

             cache_mem 64MB        

             maximum_object_size 4096KB           

             reply_body_max_size  1024000 allow all

             access_log /var/log/squid/access.log 

             visible_hostname  proxy.test.xom

cache_mgr  [email protected]       

http_access allow all 

b.一切配置以后:

            squid –z 初始化缓存

                     squid –k parse 检查语法

                     service squid start 启动squid

                     chkconfig squid on 加入开机启动

                     netstat –nltp   查看3128端口是否打开

c.客服端的配置:

                     ip : 192.168.1.12 gw:192.168.1.1

          然后打开浏览器à工具à选项à连接à局域网设置à代理服务器

          地址:192.168.1.1 端口:3128

          一切搞定之后在浏览器输入http//www.google.cn即可访问,上网了easy吧!

 

透明代理缓冲服务器的配置:

a. aquid服务器上的配置与标准的代理缓冲服务器几乎一样      

     差别就是:http_port 192.168.1.12:3128 transparent

b.添加iptables规则:

iptables -t nat -I PREROUTING  -s 192.168.1.0/24 -p tcp -dport 80 -j REDIRECT --to-ports 3128

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp --dport 53 -j SNAT -to-source 10.106.34.12

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p udp --dport 53 -j SNAT -to-source 10.106.34.12

 

squid –k parse

              service squid reload

 

c.客服端不需要在浏览器中指定代理服务器的地址,端口

但需设置上网的DNS

好了经过上三个步骤你就可以上网了

反向代理缓冲服务器配置

      注意:反向代理和透明代理不能同时使用

       步骤:

a.       Squid服务器的设置,修改/etc/squid/squid.conf

同样反向代理aquid服务器上的配置与标准的代理缓冲服务器几乎一样 

 不同之处:http_port 10.106.34.1280 vhost

           Cache_peer 192.168.1.12 parent 80 0 originserver weight=5 max-conn=30

上一行的解释:定义web服务器 web服务器地址 服务器类型 http端口 icp端口  [可选项]

 

squid –k parse

                     service squid reload

 

b.      客服端的设置(注意:这时的客服端就是web服务器)

               开启web服务

          好了通过以上配置外网即可访问你的web服务器了

==================================================================

 

随着网站访问人数越来越多,承受的并发和压力也越来越高,这时候我们需要对网站和架构进行优化,今天我们来讨论使用Squid对架构进行优化,缓存网站。网上对squid描述的文章也有成千上万,我这里简单记录一下实践的步骤。

AD:51CTO首届中国APP创新评选大赛正在招募>>

 

 

随着网站访问人数越来越多,承受的并发和压力也越来越高,这时候我们需要对网站和架构进行优化,今天我们来讨论使用Squid对架构进行优化,缓存网站。网上对squid描述的文章也有成千上万,我这里简单记录一下实践的步骤。

一、实施环境

  • 系统版本:CentOSx86_64 5.8
  • Squid版本:squid-2.6
  • Nginx版本:nginx-1.4.2

二、正式安装

安装之前我们需要对系统进行优化,主要优化系统内核相关参数,仅供参考:

  1. #sysctl.conf config 2014-03-26 
  2. net.ipv4.ip_forward = 0 
  3. net.ipv4.conf.default.rp_filter = 1 
  4. net.ipv4.conf.default.accept_source_route = 0 
  5. kernel.sysrq = 0 
  6. kernel.core_uses_pid = 1 
  7. net.ipv4.tcp_syncookies = 1 
  8. kernel.msgmnb = 65536 
  9. kernel.msgmax = 65536 
  10. kernel.shmmax = 68719476736 
  11. kernel.shmall = 4294967296 
  12. net.ipv4.tcp_max_tw_buckets = 10000 
  13. net.ipv4.tcp_sack = 1 
  14. net.ipv4.tcp_window_scaling = 1 
  15. net.ipv4.tcp_rmem = 4096        87380   4194304 
  16. net.ipv4.tcp_wmem = 4096        16384   4194304 
  17. net.core.wmem_default = 8388608 
  18. net.core.rmem_default = 8388608 
  19. net.core.rmem_max = 16777216 
  20. net.core.wmem_max = 16777216 
  21. net.core.netdev_max_backlog = 262144 
  22. net.core.somaxconn = 262144 
  23. net.ipv4.tcp_max_orphans = 3276800 
  24. net.ipv4.tcp_max_syn_backlog = 262144 
  25. net.ipv4.tcp_timestamps = 0 
  26. net.ipv4.tcp_synack_retries = 1 
  27. net.ipv4.tcp_syn_retries = 1 
  28. net.ipv4.tcp_tw_recycle = 1 
  29. net.ipv4.tcp_tw_reuse = 1 
  30. net.ipv4.tcp_mem = 94500000 915000000 927000000 
  31. net.ipv4.tcp_fin_timeout = 1 
  32. net.ipv4.tcp_keepalive_time = 15 
  33. net.ipv4.ip_local_port_range = 1024    65535 

接下来上自动安装Squid脚本,里面分别配置了两个虚拟主机域名,前端有LVS,LVS均衡后端多组squid集群,根据命中率去调整squid集群的数量,Squid后端均衡Nginx或者Apache。(完整的架构LVS+Keepalived+Squid+Nginx+Resin/Tomcat/PHP+MySQL集群)

简单逻辑图如下:

wKiom1MyeQCSP8bRAAGXIgAao8Q437.jpg

直接上脚本:

  1. #!/bin/sh 
  2. #Auto make install squid server 
  3. #Author wugk 2014-03-26 
  4. SQUID_CNF=/etc/squid/squid.conf 
  5. CACHE_DIR=( 
  6.     /data/cache1 
  7.     /data/cache2 
  8. #Install squid shell 
  9. yum install -y squid 
  10. #config squid.conf 
  11. cat >>$SQUID_CNF <<EOF 
  12. #global config squid.conf 2014-03-26 
  13. http_port 80 accel vhost vport 
  14. cache_peer 192.168.149.128 parent 80 0 originserver name=wugk1 
  15. cache_peer 192.168.149.129 parent 80 0 originserver name=wugk2 
  16. cache_peer_domain wugk1 www.wugk1.com 
  17. cache_peer_domain wugk2 www.wugk2.com 
  18. visible_hostname localhost 
  19. forwarded_for off 
  20. via off 
  21. cache_vary on 
  22. #acl config 
  23. acl manager proto cache_object 
  24. acl localhost src 127.0.0.1/32 
  25. acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 
  26. acl localnet src 10.0.0.0/8     # RFC1918 possible internal network 
  27. acl localnet src 172.16.0.0/12  # RFC1918 possible internal network 
  28. acl localnet src 192.168.0.0/16 # RFC1918 possible internal network 
  29. acl SSL_ports port 443 
  30. acl Safe_ports port 80 8080         # http 
  31. acl Safe_ports port 21          # ftp 
  32. acl Safe_ports port 443         # https 
  33. acl all src 0.0.0.0/0 
  34. acl CONNECT method CONNECT 
  35. http_access allow manager localhost 
  36. http_access deny manager 
  37. http_access deny !Safe_ports 
  38. http_access deny CONNECT !SSL_ports 
  39. http_access allow localnet 
  40. http_access allow localhost 
  41. http_access allow all 
  42. acl PURGE method PURGE 
  43. http_access allow PURGE localhost 
  44. http_access deny PURGE 
  45. #squid config 2014-03-25 
  46. cache_dir aufs /data/cache1 10240 16 256 
  47. cache_dir aufs /data/cache2 10240 16 256 
  48. cache_mem 4000 MB 
  49. maximum_object_size 8 MB 
  50. maximum_object_size_in_memory 256 KB 
  51. hierarchy_stoplist cgi-bin ? 
  52. coredump_dir /var/spool/squid 
  53. refresh_pattern ^ftp:           1440    20%     10080 
  54. refresh_pattern ^gopher:        1440    0%      1440 
  55. refresh_pattern -i (/cgi-bin/|\?) 0     0%      0 
  56. refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js) 1440    50%     2880    ignore-reload 
  57. refresh_pattern .               0       20%     4320 
  58. EOF 
  59. #config cache_dir 
  60. mkdir -p  ${CACHE_DIR[@]} ;chown -R squid:squid  ${CACHE_DIR[@]} 
  61. #restart squid server 
  62. /etc/init.d/squid restart 
  63. if 
  64.     [ "$?" == "0" ];then 
  65.     echo "The Squid Server Install Successfully !!" 
  66. else 
  67.     echo "The Squid Server Install Failed !!,Please Check Log......"                                                                                                                                                                          
  68. fi 

最后测试,前端LVS截图(注LVS此处不配置了,博客有专门的安装方法)

wKiom1MyokSjpHrmAAIfiwjj0yc342.jpg

通过浏览器查看head头,缓存命中情况截图如下:

wKiom1MyjuvyPcYVAAJ2smk3I8A715.jpg

通过命令

  1. squidclient -p 80 mgr:info |egrep "(Request Hit Ratios|Byte Hit Ratios)" 

查看缓存命中率如下:

wKiom1Mzl4DQS5i0AALkpC-Girk997.jpg

 三、批量清空缓存

使用Shell脚本批量清空squid缓存脚本auto_clean_cache.sh

  1. #!/bin/sh 
  2. DIR=/data/cache/ 
  3. Command=/usr/sbin/squidclient 
  4. if 
  5.         [ "$1" = "" ];then 
  6.         echo "Usage:{$0 "\$1" ,Example exec $0 forum.php}" 
  7.         exit 
  8. fi 
  9. grep -r -a $1 ${DIR} | strings | grep "http:"|grep -v "=" >list.txt 
  10. count=`cat list.txt|wc -l` 
  11. if 
  12.         [ "$count" -eq "0" ];then 
  13.         echo -e "---------------------------------\nThe $1 cache already update,Please exit ......"   
  14.         exit 
  15. fi 
  16. while read line 
  17. do 
  18.         $Command -m PURGE -p 80 "$line" >>/dev/null 
  19.         if [ $? -eq 0 ];then 
  20.         echo -e "----------------------------------\nThe $line cache update successfully!" 
  21.         fi 
  22. done < list.txt 

脚本执行:

  1. [root@node2 ~]# sh auto_clean_cache.sh forum.php 
  2. ---------------------------------- 
  3. The http://www.wugk2.com/forum.php cache update successfully! 
  4. [root@node2 ~]# 

=======================================


案例:
Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入
访问用户:电信宽带用户、移动宽带用户
出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开
解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器、让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题
具体操作:
CDN代理服务器:
系统:CentOS 5.5 主机名:cdn.abc.com IP:192.168.21.160 安装Squid软件,配置反向代理搭建CDN缓存服务器
安装前准备:
1、关闭SELinux
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq 保存,关闭。
shutdown -r now重启系统


2、开启防火墙80端口(后面配置squid的端口为80)
vi /etc/sysconfig/iptables
添加下面的内容
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables restart #重启防火墙使配置生效


3、修改主机的路由模式
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 #0为关闭,1为开启路由 使用sysctl -p 命令查看
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接
4、修改主机hosts文件,增加域名解析记录
vi /etc/hosts
192.168.21.129 www.abc.com #添加解析记录


===========================================================================
安装开始
1、安装Squid
yum install squid #安装(Squid 2.6)
service squid start #启动
service squid restart #重启
chkconfig squid on #设置开机启动


2、配置Squid 
cp /etc/squid/squid.conf /etc/squid/squid.confbak #备份
vi /etc/squid/squid.conf #编辑文件

http_port 80 transparent #设置squid端口,默认为3128,设置为80,客户端打开网站的时候不需要输入端口号
cache_mem 1024 MB #分配内存大小
cache_dir ufs /var/spool/squid 4096 16 256 #设置缓存文件大小
cache_effective_user squid #设置用户
cache_effective_group squid #设置用户组
access_log /var/log/squid/access.log #设置访问日志文件
cache_log /var/log/squid/cache.log #设置缓存日志文件
cache_store_log /var/log/squid/store.log #设置缓存记录文件
visible_hostname cdn.abc.com #设置squid服务器主机名
cache_mgr [email protected] #设置管理员邮箱(设置为自己的邮箱地址)
acl all src 0.0.0.0/0.0.0.0 #设置访问控制列表,默认开启
http_access allow all #设置访问权限,默认注释掉的
cache_peer 192.168.21.129 parent 80 0 no-query originserver name=web #用户访问web时,Squid向192.168.21.129的80端口发送请求
cache_peer_domain web www.abc.com #设置web域名为www.abc.com
cache_peer_access web allow all #设置访问权限,允许所有外部客户端访问web

:wq! #保存退出 
service squid stop #停止
/usr/sbin/squid -z #初始化cache缓存目录
service squid start #启动

Squid反向代理服务器安装配置完成
==================================================================

启用智能DNS解析:
如果是电信用户访问域名www.abc.com解析到192.168.21.128
如果是移动用户访问域名www.abc.com解析到192.168.21.160
CDN缓存服务器与Web服务器之间采用专线连接

http://linuxme.blog.51cto.com/1850814/372960

http://os.51cto.com/art/201404/435129.htm

http://os.51cto.com/art/201204/326839.htm

猜你喜欢

转载自aoyouzi.iteye.com/blog/2288226