首页 > 代码库 > 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认证,ncsaSquid源代码包自带的认证程序之一,实现步骤如下:

 

首先我们先找到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 代理和缓存