1.squid三种代理特点:

squid普通代理:
需要客户机在浏览器中指定代理服务器的地址、端口。

squid透明代理:
适用于企业的网关主机;
客户机不需要指定代理服务器地址、端口等信息;
通过iptables将客户机的web访问数据转交给代理服务程序处理。

squid反向代理:
为internet用户访问企业web站点提供缓存加速。

2.安装:
源码:
tar xf squid-3.3.5.tar.bz2 && cd squid-3.3.5
./configure ‘–prefix=/usr/local/squid’ ‘–enable-gnuregex’ ‘–enable-dlmalloc’ ‘–enable-debug-cbdata’ ‘–enable-async-io=100′ ‘–with-pthreads’ ‘–enable-storeio=aufs,diskd,ufs’ ‘–enable-removal-policies=heap,lru’ ‘–enable-icmp’ ‘–enable-delay-pools’ ‘–enable-useragent-log’ ‘–enable-referer-log’ ‘–disable-wccp’ ‘–disable-wccpv2′ ‘–enable-kill-parent-hack’ ‘–enable-arp-acl’ ‘–enable-snmp’ ‘–enable-default-err-language=Simplify_Chinese’ ‘–enable-err-languages=Simplify_Chinese English’ ‘–disable-poll’ ‘–enable-epoll’ ‘–disable-ident-lookups’ ‘–disable-internal-dns’ ‘–enable-truncate’ ‘–enable-underscores’ ‘–enable-basic-auth-helpers=NCSA’ ‘–enable-stacktrace’ ‘–with-winbind-auth-challenge’ ‘–enable-large-cache-files’ ‘–with-large-files’ ‘–with-maxfd=65535′ ‘–enable-x-accelerator-vary’ –enable-ltdl-convenience && make && make install
启动/关闭:/usr/local/squid/sbin/squid start|stop
重载配置:/usr/local/squid/sbin/squid -k reconfigure

yum:
yum install -y squid
启动/关闭:service squid start|stop
重载配置:squid -k reconfigure

3.配置信息:
交换空间设定选项
cache_dir ufs /var/spool/squid 100M 16 256 #设置缓存数据时使用的交换空间参数,总大小为100M,16个目录,每个目录下有256个子目录,可以指定多次
cache_swap_low 90
cache_swap_high 95
说明:squid使用大量的交换空间来存储对象。那么,过了一定的时间以后,该交换空间就会用完,所以还必须定期的按照某种指标来将低于某个水平 线的对象清除。squid使用所谓的“最近最少使用算法”(LRU)来做这一工作。当已使用的交换空间达到cache_swap_high时,squid 就根据LRU所计算的得到每个对象的值将低于某个水平线的对象清除。这种清除工作一直进行直到已用空间达到cache_swap_low。这两个值用百分 比表示,如果你所使用的交换空间很大的话,建议你减少这两个值得差距,因为这时一个百分点就可能是几百兆空间,这势必影响squid的性能。
maximum_object_size 4096KB #允许保存到高速缓存的最大文件大小
cache_mem 64MB #设置用于缓存功能的内存空间大小,一般为物理内存的1/4-1/3
reply_body_max_size 10240000 allow all #允许用户下载的最大文件大小,默认单位为字节

日志的选项
cache_access_log /usr/local/squid/var/logs/cache_access.log combined #指定客户请求记录日志的完整路径
cache_store_log /usr/local/squid/var/logs/cache_store.log #指定对象存储记录日志的完整路径,该记录表明哪些对象被写到交换空间,哪些对象被从交换空间清除。
cache_log /var/log/squid/cache.log 指定squid一般信息日志的完整路径
access_log /var/log/squid/access.log squid #指定日志文件的保存位置和记录格式
用户访问控制选项
request_size 100KB 设置用户请求通讯量的最大允许值(单位为KB)。如果用户用POST方法请求时,应该设一个较大的值
reference_age
说明:squid根据对象的LRU(最近最少使用算法)来清除对象,squid依据使用磁盘空间的总量动态地计算对象的LRU年龄。我们用 reference_age定义对象的最大LRU年龄。如果一个对象在指定的reference_age内没有被访问,squid将删除该对象。缺省值为 一个月。你可以使用如下所示的时间表示方法。
1 week
3.5 days
4 months
2.2 hours

管理参数选项
cache_mgr root 设置管理员邮件地址
cache_effective_user squid #启动squid的用户
cache_effective_group squid #启动squid的组
visible_hostname proxy.benet.com #设置代理服务器可用的完整主机名
unique_hostname 如果你有一个代理服务器阵列,并且你为每个代理服务器指定了同样的“visible_hostname”,同时你必须为它们指定不同的“unique_hostname”来避免“forwarding loops ”(传输循环)发生

其他选项
http_port 3128 #指定代理服务监听的地址和端口
dns_testnames www.google.com #测试squid开机启动后是否能正常工作
memory_pools on|off #如果设置为on,squid将保留所有已经分配(但未使用)的内存池以便在将来使用。
log_icp_queries on|off #是否对icp请求作日志,如果系统负载过大,可以off,默认为on

4.ACL访问控制:
ACL,访问控制列表,可以从客户机的ip地址、请求访问的url、域名、文件类型、访问时间、并发请求数等各方面进行控制。
定义acl列表:acl 列表名称 列表类型 列表内容
限制acl列表:http_access allow或deny 列表名称
eg:acl all src 0.0.0.0/0.0.0.0
http_access deny all
列表类型:
src 源ip eg:acl lan1 src 192.168.1.0/24
dst 目的ip
port 端口
srcdomain 源域名
dstdomain 目的域名 eg:acl blk_domain dstdomain .qq.com .kaixin001.com
time 时间 eg:acl work_hours time MTWHF 08:30-17:30
maxconn 最大连接 eg:acl max20_conn maxconn 20
url_regex url正则过滤 eg:acl blk_url url_regex -i ^rtsp:// ^mms://
urlpath_regex urlpath正则过滤 eg :acl realfile urlpath_regex -i \.rmvb$ \.rm$ sex
acl列表访问控制:(acl列表可以联合)
http_access deny lan1 blk_url (拒绝lan1的ip访问^rtsp:// ^mms://)
acl访问权限
http_access allow|deny 列表名

5.实验:
squid 传统代理
基本配置:
yum -y install squid*
vim /etc/squid/squid.conf
http_port 192.168.1.77:3128 #指定服务端口
visible_hostname 192.168.1.77 #报错时显示服务器的名称
acl innet src 192.168.1.0/24 #名称为innet的ip群体
acl all src 0.0.0.0/0.0.0.0 #其它ip群体
http_access allow innet #允许innet群体
http_access deny all #拒绝all群体

squid 透明代理
基本配置:
acl all src 0.0.0.0/0.0.0.0
http_port 网关内网IP:3128 transparent
http_access allow all

iptables -t nat -I PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-ports 3128

squid 反向代理
基本配置:
http_port 200.168.10.1:80 accel
cache_peer 192.168.10.2 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.3 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.4 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.5 parent 80 0 originserver weight=5 max-conn=30
#cache_peer server地址 服务器类型 http端口 icp端口 [可选项]
visible_hostname 200.168.10.1
acl all src 0.0.0.0/0.0.0.0
http_access allow all

反向代理虚拟主机映射:
http_port 200.168.10.1:80 accel
cache_peer 192.168.10.2 parent 80 0 originserver name=a
cache_peer 192.168.10.3 parent 80 0 originserver name=b
cache_peer_domain a www.lamp.com
cache_peer_domain b www.web.com
cache_peer_access a allow all
cache_peer_access b allow all

6.缓存查看:
通过查看web服务器的访问日志,状态为304表示,通过缓存
代理服务器下通过/var/spool/aquid/ 下tree命令,查看文件数,如果有缓存文件,则通过head 00000000X 查看缓存数据。
客户端通过firefox的firebug插件来查看请求和响应头信息,如果是从缓存服务器取得数据,则可以看到squid信息。