squid的简单介绍

squid的概念

squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。

squid代理的作用

  • 通过缓存的方式为用户提供Web访问加速
  • 对用户的Web访问进行过滤控制

工作流程

当代理服务器中有客户端需要的数据时:

a. 客户端向代理服务器发送数据请求;

b. 代理服务器检查自己的数据缓存;

c. 代理服务器在缓存中找到了用户想要的数据,取出数据;

d. 代理服务器将从缓存中取得的数据返回给客户端。

当代理服务器中没有客户端需要的数据时:

  1. 客户端向代理服务器发送数据请求;

  2. 代理服务器检查自己的数据缓存;

  3. 代理服务器在缓存中没有找到用户想要的数据;

  4. 代理服务器向Internet 上的远端服务器发送数据请求;

  5. 远端服务器响应,返回相应的数据;

  6. 代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

Squid代理服务器工作在TCP/IP应用层

Squid各种代理的定义

正向代理

标准的代理缓冲服务器

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

透明代理缓冲服务器

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

反向代理

反向代理缓冲器

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

正向代理与反向代理的区别

概念

正向代理:对于原始服务器而言,就是客户端的代言人

反向代理:对于客户端而言,就像是原始服务器

用途

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。

反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

安全性

正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

Squid主要组成部分

服务名:squid

主程序:/usr/sbin/squid

配置目录:/etc/squid

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

监听tcp端口号:3128

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

squid常用配置选项

/etc/squid/squid.conf

  1. http_port 3128 (还可以只监听一个IP http_port 192.168.0.1:3128)
  2. cache_mem 64MB #缓存占内存大小
  3. maximum_object_size 4096KB #最大缓存块
  4. reply_body_max_size 1024000 allow all #限定下载文件大小
  5. access_log /var/log/squid/access.log #访问日志存放的地方
  6. visible_hostname proxy.test.xom #可见的主机名
  7. cache_dir ufs /var/spool/squid 100 16 256
  8. #ufs:缓存数据的存储格式
  9. #/var/spool/squid 缓存目录
  10. #100:缓存目录占磁盘空间大小(M)
  11. #16:缓存空间一级子目录个数
  12. #256:缓存空间二级子目录个数
  13. cache_mgr webmaster@test.com #定义管理员邮箱
  14. http_access deny all #访问控制

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声明的格式如下:

  1. acl acl_element_name type_of_acl_element values_to_acl

注:

  • acl_element_name 可以是任一个在ACL中定义的名称
  • 任何两个ACL元素不能用相同的名字
  • 每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一ACL元素的值被匹配,则这个ACL元素即被匹配。
  • 并不是所有ACL元素都能使用访问列表中的全部类型
  • 不同的ACL元素写在不同行中,squid将把他们组合在一个列表中

访问条目

我们可以使用许多不同的访问条目。下面是我们常用的几个:

  • http_access:允许HTTP访问
  • no_cache:定义对缓存请求的响应。

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

  1. 一个访问列表可以由多条规则组成

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

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

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

    http_access Action 声明3

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

  4. 列表中的规则总是遵循由上而下的顺序

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

Squid.conf配置文件详解

  1. #acl all src 0.0.0.0/0.0.0.0 and http_access allow all选项定义了一个访问控制列表。详细情况参见和Squid软件
  2. #携带的文档。这里的访问控制列表允许所有对代理服务的访问,因为这里该代理是加速web服务器。
  3. acl all src 0.0.0.0/0.0.0.0 #允许所有IP访问
  4. acl manager proto http #manager url协议为http
  5. acl localhost src 127.0.0.1/255.255.255.255 #允午本机IP
  6. acl to_localhost dst 127.0.0.1 #允午目的地址为本机IP
  7. acl Safe_ports port 80 # 允许安全更新的端口为80
  8. acl CONNECT method CONNECT #请求方法以CONNECT
  9. http_access allow all #允许所有人使用该代理.因为这里是代理加速web服务器
  10. http_reply_access allow all #允许所有客户端使用该代理
  11. acl OverConnLimit maxconn 16 #限制每个IP最大允许16个连接,防止攻击
  12. http_access deny OverConnLimit
  13. icp_access deny all #禁止从邻居服务器缓冲内发送和接收ICP请求.
  14. miss_access allow all #允许直接更新请求
  15. ident_lookup_access deny all #禁止lookup检查DNS
  16. http_port 8080 transparent #指定Squid监听浏览器客户请求的端口号。
  17. hierarchy_stoplist cgi-bin ? #用来强制某些特定的对象不被缓存,主要是处于安全的目的。
  18. acl QUERY urlpath_regex cgi-bin \?
  19. cache deny QUERY
  20. cache_mem 1 GB #这是一个优化选项,增加该内存值有利于缓存。应该注意的是:
  21. #一般来说如果系统有内存,设置该值为(n/)3M。现在是3G 所以这里1G
  22. fqdncache_size 1024 #FQDN 高速缓存大小
  23. maximum_object_size_in_memory 2 MB #允许最大的文件载入内存
  24. memory_replacement_policy heap LFUDA #动态使用最小的,移出内存cache
  25. cache_replacement_policy heap LFUDA #动态使用最小的,移出硬盘cache
  26. cache_dir ufs /home/cache 5000 32 512 #高速缓存目录 ufs 类型 使用的缓冲值最大允午1000MB空间,
  27. #32个一级目录,512个二级目录
  28. max_open_disk_fds 0 #允许最大打开文件数量,0 无限制
  29. minimum_object_size 1 KB #允午最小文件请求体大小
  30. maximum_object_size 20 MB #允午最大文件请求体大小
  31. cache_swap_low 90 #最小允许使用swap 90%
  32. cache_swap_high 95 #最多允许使用swap 95%
  33. ipcache_size 2048 # IP 地址高速缓存大小 2M
  34. ipcache_low 90 #最小允许ipcache使用swap 90%
  35. ipcache_high 95 #最大允许ipcache使用swap 90%
  36. access_log /var/log/squid/access.log squid #定义日志存放记录
  37. cache_log /var/log/squid/cache.log squid
  38. cache_store_log none #禁止store日志
  39. emulate_httpd_log on #将使Squid仿照Web服务器的格式创建访问记录。如果希望使用
  40. #Web访问记录分析程序,就需要设置这个参数。
  41. refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims ignore-reload #更新cache规则
  42. acl buggy_server url_regex ^http://.... http:// #只允许http的请求
  43. broken_posts allow buggy_server
  44. acl apache rep_header Server ^Apache #允许apache的编码
  45. broken_vary_encoding allow apache
  46. request_entities off #禁止非http的标分准请求,防止攻击
  47. header_access header allow all #允许所有的http报头
  48. relaxed_header_parser on #不严格分析http报头.
  49. client_lifetime 120 minute #最大客户连接时间 120分钟
  50. cache_mgr sky@test.com #指定当缓冲出现问题时向缓冲管理者发送告警信息的地址信息。
  51. cache_effective_user squid #这里以用户squid的身份Squid服务器
  52. cache_effective_group squid
  53. icp_port 0 #指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。
  54. #这里设置为0是因为这里配置Squid为内部Web服务器的加速器,
  55. #所以不需要使用邻居服务器的缓冲。0是禁用
  56. # cache_peer 设置允许更新缓存的主机,因是本机所以127.0.0.1
  57. cache_peer 127.0.0.1 parent 80 0 no-query default multicast-responder no-netdb-exchange
  58. cache_peer_domain 127.0.0.1
  59. hostname_aliases 127.0.0.1
  60. error_directory /usr/share/squid/errors/Simplify_Chinese #定义错误路径
  61. always_direct allow all # cache丢失或不存在是允许所有请求直接转发到原始服务器
  62. ignore_unknown_nameservers on #开反DNS查询,当域名地址不相同时候,禁止访问
  63. coredump_dir /var/log/squid #定义dump的目录
  64. max_filedesc 2048 #最大打开的文件描述
  65. half_closed_clients off #使Squid在当read不再返回数据时立即关闭客户端的连接。
  66. #有时read不再返回数据是由于某些客户关闭TCP的发送数据
  67. #而仍然保持接收数据。而Squid分辨不出TCP半关闭和完全关闭。
  68. buffered_logs on #若打开选项“buffered_logs”可以稍稍提高加速某些对日志文件的写入,该选项主要是实现优化特性。
  69. #防止天涯盗链,转嫁给百度
  70. acl tianya referer_regex -i tianya
  71. http_access deny tianya
  72. deny_info tianya
  73. #阻止baidu蜘蛛
  74. acl baidu req_header User-Agent Baiduspider
  75. http_access deny baidu
  76. #限制同一IP客户端的最大连接数
  77. acl OverConnLimit maxconn 128
  78. http_access deny OverConnLimit
  79. #防止被人利用为HTTP代理,设置允许访问的IP地址
  80. acl myip dst 222.18.63.37
  81. http_access deny !myip
  82. #允许本地管理
  83. acl Manager proto cache_object
  84. acl Localhost src 127.0.0.1 222.18.63.37
  85. http_access allow Manager Localhost
  86. cachemgr_passwd 53034338 all
  87. http_access deny Manager
  88. #仅仅允许80端口的代理
  89. acl all src 0.0.0.0/0.0.0.0
  90. acl Safe_ports port 80 # http
  91. http_access deny !Safe_ports
  92. http_access allow all
  93. #Squid信息设置
  94. visible_hostname happy.swjtu.edu.cn
  95. cache_mgr ooopic2008@qq.com
  96. #基本设置
  97. cache_effective_user squid
  98. cache_effective_group squid
  99. tcp_recv_bufsize 65535 bytes
  100. #2.6的反向代理加速配置
  101. cache_peer 127.0.0.1 parent 80 0 no-query originserver
  102. #错误文档
  103. error_directory /usr/local/squid/share/errors/Simplify_Chinese
  104. #单台使用,不使用该功能
  105. icp_port 0
  106. hierarchy_stoplist cgi-bin ?
  107. acl QUERY urlpath_regex cgi-bin \? .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
  108. cache deny QUERY
  109. acl apache rep_header Server ^Apache
  110. broken_vary_encoding allow apache
  111. refresh_pattern ^ftp: 1440 20% 10080
  112. refresh_pattern ^gopher: 1440 0% 1440
  113. refresh_pattern . 0 20% 4320
  114. cache_store_log none
  115. pid_filename /usr/local/squid/var/logs/squid.pid
  116. emulate_httpd_log on

Squid常用命令

  1. 初始化在squid.conf里配置的cache目录

    squid -z

    如果有错误提示,请检查cache目录的权限,可以更改目录权限

    chown -R squid:squid /cache目录

  2. 对squid.conf排错,即验证squid.conf的语法和配置

    squid -k parse

    如果在squid.conf中有语法或配置错误,这里会返回提示,若无返回,尝试启动squid

  3. 前台启动squid,并输出启动过程

    /usr/local/squid/sbin/squid -N -d1

    如果有ready to server reques相关信息,说明squid启动成功

    然后ctrl+c ,停止squid,并以后台运行的方式启动它

  4. 启动squid在后台运行

    squid -s

    可以使用ps -ax | grep squid 来查看squid进程是否存在

  5. 停止squid

    squid -k shutdown

  6. 重新引导修改过的squid.conf

    squid -k reconfigure -f /XXX/squid.conf

    当squid进行配置更改后,可以使用该命令进行squid配置重载

  7. 把squid添加到系统启动项

    vim /etc/rc.local

    /usr/local/squid/sbin/squid -s

  8. 修改cache缓存目录的权限

    chown -R squid.squid /cache目录

    cache缓存目录根据自己的配置更改,squid用户和组是squid,squid

  9. 修改squid日志目录的权限

    chown -R squid.squid 定义的日志文件所在目录

    这一步并不是适合每一个使用squid的用户,意为让squid有权限在该目录里进行写操作

  10. 查看你的日志文档

    more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT

    该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。

    more /usr/local/squid/var/logs/access.log | grep TCP_HIT

    该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。

    more /usr/local/squid/var/logs/access.log | grep TCP_MISS

    该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是从原始服务器获取并返回给访问用户。

Squid命中率分析

  1. /usr/local/squid/bin/squidclient -p 80 mgr:info
  2. /usr/local/squid/bin/squidclient -p 80 mgr:5min

可以看到详细的性能情况,其中PORT是你的proxy的端口,5min可以是60min

取得squid运行状态信息:

  1. squidclient -p 80 mgr:info

取得squid内存使用情况:

  1. squidclient -p 80 mgr:mem

取得squid已经缓存的列表:

  1. squidclient -p 80 mgr:bjects. use it carefully,it may crash

取得squid的磁盘使用情况:

  1. squidclient -p 80 mgr:diskd

强制更新某个url:

  1. squidclient -p 80 -m PURGE http://www.xxx.com/xxx.php

更多的请查看:squidclient-h 或者 squidclient -p 80 mgr:

查命中率:

  1. squidclient -h IP(具体侦听IP) -p 80(具体侦听端口) mgr:info

定期清理swap.state内无效数据

  1. /path/to/squid/sbin/squid -k rotate -f /path/to/squid/conf_file
  2. vi /etc/crontab
  3. 0 0 * * * root /usr/local/sbin/squid -k rotate -f /usr/local/etc/squid/squid1.conf

当squid应用运行了一段时间之后,cache_dir对应的swap.state文件就会变得越来越大,里面的无效接口数据越来越多,这可能影响squid的响应时间,因此需要使用squid清理swap.state里面的无效数据,减少swap.state的大小。

参考文章:

http://blog.chinaunix.net/uid-18933439-id-2808695.html

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

http://blog.sina.com.cn/s/blog_67dd1efa0100izc0.html

squid介绍及其简单配置的更多相关文章

  1. 转-squid介绍及其简单配置

    本文原始出处:http://linuxme.blog.51cto.com/1850814/372960 1.Squid是什么? Squid中文权威指南:http://zyan.cc/book/squi ...

  2. squid 正向代理 简单配置

    linux 正向同步 项目上web服务器不给访问外网,迁移服务器环境又太麻烦,决定给web服务器做正向代理,刚开始使用nginx,但是https代理一直不成功,后面大佬建议使用squid来达到相同目的 ...

  3. SaltStack介绍及简单配置-第一篇

    SaltStack介绍 一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, 使其可以用于编配 ...

  4. CCNA网络工程师学习进程(6)vlan相关协议的配置与路由器简单配置介绍

        前面已经介绍了大部分与vlan技术相关的交换机的协议的配置,更深层次的还有STP协议和以太网端口聚合技术,接着还会简单介绍一下路由器的基本应用.     (1)STP(Spanning-tre ...

  5. Mybatis缓存(1)--------系统缓存及简单配置介绍

    前言 Mybatis的缓存主要有两种: 系统缓存,也就是我们一级缓存与二级缓存: 自定义的缓存,比如Redis.Enhance等,需要额外的单独配置与实现,具体日后主要学习介绍. 在这里主要记录系统缓 ...

  6. CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB,两条命令都可以 systemctl sta ...

  7. Android greenDao的简单配置和使用

    最近自学做东西的时候用到了一个收藏的功能,然后我想把东西存放到SQLite当中,然而自己传值的时候都是用到的实体类,所以存起来也比较麻烦,所以从网上找到一个greenDao的开源框架非常火,不仅效率高 ...

  8. Struts 2简单配置分析

    要配置Struts 2,首先先要有Struts 2的Jar包,可以去Struts的官网下载(http://struts.apache.org/),这里有3个GA版本可以选择下载,我选择的是最新的2.2 ...

  9. 【转载】Ssh整合开发介绍和简单的登入案例实现

    Ssh整合开发介绍和简单的登入案例实现 Ssh整合开发介绍和简单的登入案例实现 一  介绍: Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开 ...

随机推荐

  1. Linux ubuntu安装

    http://www.ubuntu.org.cn/download/alternative-downloads 下载地址: http://releases.ubuntu.com/ 国内镜像: http ...

  2. 百度API

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. dubbo zk 分布式服务项目搭建与配置

    1. 项目 jar  -----提供接口 2. 项目 jar  -----接口实现   provider启动zk main方法启动 start applicationContext.xml <b ...

  4. 6.初探Asynctask

    AsyncTask定义了三种泛型类型 Params,Progress和Result. Params 启动任务执行的输入参数,比如HTTP请求的URL.Progress 后台任务执行的百分比.Resul ...

  5. BZOJ2818 Gcd

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  6. js jquery 页面加载初始化方法

    js jquery 页面加载初始化方法 一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> < ...

  7. 你所不了解的float(滥用float的怪异现象)

    float设计初衷就是为了实现文字环绕效果 原本页面流布局显示如上图所示,运用了float属性后就显示为如下图所示,这就是浮动的设计初衷 float的一些特性:包裹性.破坏性. 包裹的特性其实主要有三 ...

  8. mysql5.7导入csv文件

    环境: Windows10企业版X64 mysql5.7免安装版(从5.6版本开始,官方不再提供64位的msi版本) 运行mysqld.exe启动mysql进程. 用root登录mysql: mysq ...

  9. 树莓派系统介绍:DIetPi

    项目主页:http://fuzon.co.uk/phpbb/viewtopic.php?f=8&t=6 当前版本:V34(15年4月16日发布) DietPi是国外一个基于Raspbian的精 ...

  10. Yii2.0登录详解(下)

    在上一篇博文中,笔者讲述了yii2应用用户登陆的基本方法,但是这些方法到底是怎样实现登陆的呢?底层的原理到底是什么?在这篇博文笔者将从Yii的源码角度分析登陆的基本原理以及cookie自动登陆的原理, ...