首页 > 代码库 > squid 代理和缓存
squid 代理和缓存
于2017.04.21 从新浪博客搬迁过来
----------------------------------------------------------------
在现在的企业中squid 作为代理服务器和缓存服务器使用,在小型的环境中squid可以作为代理服务器来供单位用户上网使用;在大型的环境中squid又作为缓存服务器来对web进行加速。常见的有正向代理、透明代理、反向代理;
安装squid
安装可以使用yum安装,也可以使用源码包编译安装;无论何种安装方式都是非常简单的,下面使用yum自动安装:
#yum –y install squid
安装好后squid目录在/etc/squid,配置文件为/etc/squid/squid.conf
在这配置文件中可用的参数并不多,常见的如下:
http_port 3128 代理端口
cache_mem 8 MB 缓存大小
cache_dir ufs /var/spool/squid 100 16 256 缓存文件路径
access_log /var/log/squid/access.log squid 日志路径及用户
maximum_object_size 4096 KB 缓存单个文件最大4M
reply_body_max_size 10240000 allow all 下载文件最大不超过10M 这里是字节为单位10240000字节==10M
visible_hostname proxy.test.com squid服务器主机名
一、squid正向代理
正向代理通常用在小型的环境中,用来代理内网的用户进行上网,配置很简单,将cache_mem和 cache_dir 开启,修改代理端口(也可以是默认的3128);然后启动squid
配置代理端口
http_port 172.16.0.2:3128
配置缓存大小和缓存目录
cache_mem 16 MB
cache_dir ufs /var/spool/squid 100 16 256
建立acl控制访问
acl sina src 172.16.0.0/24
http_access allow sina
启动squid
#squid –k parse 检查配置文件是否有错误
#service squid start
在初次启动的时候,squid会初始化缓存目录,在服务器起来后可以查看缓存目录
#ls /var/spool/squid
#netstat –nap | grep squid
客户端测试
在浏览器中配置代理服务器
而实际上客户端本身根本是无法通讯的,所以这里正向代理设置成功了,将代理内网进行上网。
查看缓存命中HIT 表示缓存 MISS 表示未缓存
二、反向代理
正向代理是代理内网用户访问外网,而反向代理则是代理外网的用户来访问内网的服务器,并将内容进行缓存,提高用户访问速度;设置很简单在正向代理的基础上进行修改点即可。
修改代理端口和ip
http_port 192.168.5.155:80 vhost
设置后端源服务器
cache_peer web服务器 服务器类型 httpd端口 icp端口 [可选项]
cache_peer 172.16.0.4 parent 80 0 originserver weight=5 max-conn=30
cache_peer 172.16.0.5 parent 80 0 originserver weight=3 max-conn=30
这里介绍一下这些参数
172.16.0.4 后端web服务器或者其他squid代理服务器
originserver 父服务器(就是源服务器,当没有缓存的时候去那里取数据)
sibling 兄弟服务器(在有多个squid服务器时,可以设置兄弟服务器,当请求过来本机没有缓存时,先去兄弟服务器查找缓存)
weight 权重,后端服务器可以设置权重,一定程度实现负载均衡
max-conn squid打开到邻居cache的同时连接的数量进行限制
保存这些配置,然后让squid重新读取配置文件
#squid –k reconfig
客户端测试
客户端与后端web服务器并不能通讯
三、用户认证
在企业中有时候有些内部的网站或者管理后台,只希望公司自己的员工能够访问,其他人则不能访问,这时候可以加一个用户认证来控制谁能访问。默认squid是不带认证程序的,可以通过外部认证程序来实现,下面介绍ncsa认证,ncsa是Squid源代码包自带的认证程序之一,实现步骤如下:
首先我们先找到ncsa程序所在位置
#find / -name ncsa_auth
/usr/lib64/squid/ncsa_auth
在squid.conf 中配置认证程序路径和密码文件
auth_parm basic program /usr/lib64/squid/ncsa_auth /etc/squid/etc/passwd
通过htpasswd 程序来创建密码文件
mkdir -p /etc/squid/etc/
htpasswd -c /etc/squid/etc/passwd test #以后在添加用户时不需要 -c
配置acl访问控制
acl user_name proxy_auth REQUIRED
http_access allow user_name
可以使用单词"REQUIRED"作为特殊值去匹配任意用户名。假如squid 不能查明用户名,ACL 不匹配。
acl name proxy_auth test #acl name proxy_auth REQUIRED
http_access allow name
客户端测试,需要输入用户名密码
四、透明代理
透明代理需要结合iptabls来实现,通过iptables转发数据,配置也很简单,只需要将squid的代理端口修改一下即可
http_port 172.16.0.2:3128 transparent
开启路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward
配置iptabls 规则(不知是否正确,网上抄袭而来,对iptables很陌生)
iptables -t nat -A PREROUTING -i eth1 -s 172.16.0.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
客户端将网关设置成172.16.0.2 即可
squid 代理和缓存