squid的简单介绍、配置

squid的简单介绍

squid的概念

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

squid代理的做用

  • 经过缓存的方式为用户提供Web访问加速linux

  • 对用户的Web访问进行过滤控制web

    工做流程

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

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

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

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
#ufs:缓存数据的存储格式
#/var/spool/squid    缓存目录
#100:缓存目录占磁盘空间大小(M)
#16:缓存空间一级子目录个数
#256:缓存空间二级子目录个数
cache_mgr webmaster@test.com    #定义管理员邮箱
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声明的格式以下:

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配置文件详解

#acl all src 0.0.0.0/0.0.0.0 and http_access allow all选项定义了一个访问控制列表。详细状况参见和Squid软件
#携带的文档。这里的访问控制列表容许全部对代理服务的访问,由于这里该代理是加速web服务器。
acl all src 0.0.0.0/0.0.0.0                 #容许全部IP访问
acl manager proto http                 #manager url协议为http
acl localhost src 127.0.0.1/255.255.255.255  #允午本机IP
acl to_localhost dst 127.0.0.1                 #允午目的地址为本机IP
acl Safe_ports port 80                # 容许安全更新的端口为80
acl CONNECT method CONNECT        #请求方法以CONNECT
http_access allow all                #容许全部人使用该代理.由于这里是代理加速web服务器
http_reply_access allow all                #容许全部客户端使用该代理

acl OverConnLimit maxconn 16        #限制每一个IP最大容许16个链接,防止***
http_access deny OverConnLimit

icp_access deny all                        #禁止从邻居服务器缓冲内发送和接收ICP请求.
miss_access allow all                #容许直接更新请求
ident_lookup_access deny all                                #禁止lookup检查DNS
http_port 8080 transparent                                #指定Squid监听浏览器客户请求的端口号。

hierarchy_stoplist cgi-bin ?                #用来强制某些特定的对象不被缓存,主要是处于安全的目的。
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

cache_mem 1 GB        #这是一个优化选项,增长该内存值有利于缓存。应该注意的是:
                     #通常来讲若是系统有内存,设置该值为(n/)3M。如今是3G 因此这里1G
fqdncache_size 1024        #FQDN 高速缓存大小
maximum_object_size_in_memory 2 MB        #容许最大的文件载入内存

memory_replacement_policy heap LFUDA  #动态使用最小的,移出内存cache
cache_replacement_policy heap LFUDA         #动态使用最小的,移出硬盘cache

cache_dir ufs /home/cache 5000 32 512  #高速缓存目录 ufs 类型 使用的缓冲值最大允午1000MB空间,
#32个一级目录,512个二级目录

max_open_disk_fds 0                                 #容许最大打开文件数量,0 无限制
minimum_object_size 1 KB                         #允午最小文件请求体大小
maximum_object_size 20 MB                 #允午最大文件请求体大小

cache_swap_low 90                            #最小容许使用swap 90%
cache_swap_high 95                            #最多容许使用swap 95%

ipcache_size 2048                                # IP 地址高速缓存大小 2M
ipcache_low 90                                #最小容许ipcache使用swap 90%
ipcache_high 95                                  #最大容许ipcache使用swap 90%


access_log /var/log/squid/access.log squid        #定义日志存放记录
cache_log /var/log/squid/cache.log squid
cache_store_log none                        #禁止store日志

emulate_httpd_log on        #将使Squid仿照Web服务器的格式建立访问记录。若是但愿使用
                                #Web访问记录分析程序,就须要设置这个参数。

refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims ignore-reload   #更新cache规则

acl buggy_server url_regex ^http://.... http://          #只容许http的请求
broken_posts allow buggy_server

acl apache rep_header Server ^Apache                 #容许apache的编码
broken_vary_encoding allow apache

request_entities off                                        #禁止非http的标分准请求,防止***
header_access header allow all                        #容许全部的http报头
relaxed_header_parser on                                #不严格分析http报头.
client_lifetime 120 minute                                #最大客户链接时间 120分钟

cache_mgr sky@test.com                        #指定当缓冲出现问题时向缓冲管理者发送告警信息的地址信息。

cache_effective_user squid                        #这里以用户squid的身份Squid服务器
cache_effective_group squid

icp_port 0                       #指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。
                     #这里设置为0是由于这里配置Squid为内部Web服务器的加速器,
                     #因此不须要使用邻居服务器的缓冲。0是禁用

# cache_peer 设置容许更新缓存的主机,因是本机因此127.0.0.1
cache_peer 127.0.0.1 parent 80 0 no-query default multicast-responder no-netdb-exchange
cache_peer_domain 127.0.0.1                                 
hostname_aliases 127.0.0.1

error_directory /usr/share/squid/errors/Simplify_Chinese        #定义错误路径

always_direct allow all                # cache丢失或不存在是容许全部请求直接转发到原始服务器
ignore_unknown_nameservers on        #开反DNS查询,当域名地址不相同时候,禁止访问
coredump_dir  /var/log/squid                 #定义dump的目录

max_filedesc 2048                #最大打开的文件描述

half_closed_clients off        #使Squid在当read再也不返回数据时当即关闭客户端的链接。
                                #有时read再也不返回数据是因为某些客户关闭TCP的发送数据
                                #而仍然保持接收数据。而Squid分辨不出TCP半关闭和彻底关闭。

buffered_logs on #若打开选项“buffered_logs”能够稍稍提升加速某些对日志文件的写入,该选项主要是实现优化特性。

#防止天涯盗链,转嫁给百度
acl tianya referer_regex -i tianya
http_access deny tianya
deny_info  tianya
#阻止baidu蜘蛛
acl baidu req_header User-Agent Baiduspider
http_access deny baidu
#限制同一IP客户端的最大链接数
acl OverConnLimit maxconn 128
http_access deny OverConnLimit

#防止被人利用为HTTP代理,设置容许访问的IP地址
acl myip dst 222.18.63.37
http_access deny !myip

#容许本地管理
acl Manager proto cache_object
acl Localhost src 127.0.0.1 222.18.63.37
http_access allow Manager Localhost
cachemgr_passwd 53034338 all
http_access deny Manager

#仅仅容许80端口的代理
acl all src 0.0.0.0/0.0.0.0
acl Safe_ports port 80 # http
http_access deny !Safe_ports
http_access allow all

#Squid信息设置
visible_hostname happy.swjtu.edu.cn
cache_mgr  ooopic2008@qq.com

#基本设置
cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65535 bytes

#2.6的反向代理加速配置
cache_peer 127.0.0.1 parent 80 0 no-query originserver

#错误文档
error_directory /usr/local/squid/share/errors/Simplify_Chinese

#单台使用,不使用该功能
icp_port 0

hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \? .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
cache deny QUERY

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache


refresh_pattern ^ftp:           1440 20%     10080
refresh_pattern ^gopher:        1440 0%    1440
refresh_pattern .             0    20%     4320

cache_store_log none
pid_filename /usr/local/squid/var/logs/squid.pid
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命中率分析

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

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

取得squid运行状态信息:

    squidclient -p 80 mgr:info

取得squid内存使用状况:

    squidclient -p 80 mgr:mem

取得squid已经缓存的列表:

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

取得squid的磁盘使用状况:

squidclient -p 80 mgr:diskd

强制更新某个url:

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

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

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

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

/path/to/squid/sbin/squid -k rotate -f /path/to/squid/conf_file
vi /etc/crontab
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的大小。

相关文章
相关标签/搜索