您的位置:首页 > 运维架构 > 反向代理

squid代理

2016-06-01 16:53 489 查看
什么是squid
squid可以做代理也可以做缓存
squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O.
squid不仅可以做正向代理,又可以做反向代理。
正向代理,squid后面是客户端,客户端上网要通过Squid去上;反向代理,squid后面是服务器,服务器返回给用户数据需要走squid.
正向代理用在企业的办公环境中,员工上网需要通过squid代理来上网,这样可以节省网络带宽资源。而反向代理用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器,它用于网站架构中。一、squid正向代理1、安装yum install -y squid2、编辑配置文件增加以下配置vim /etc/squid/squid.confcache_dir ufs /var/spool/squid 100 16 256 #开启缓存目录(100表示大小,16一级子目录个数,256二级子目录个数)cache_mem 28 MB#内容缓存大小refresh_pattern \.(jpg|png|gif|js|css|mp3|mp4) 1440 20% 2880#正则表达缓存图片等配置refresh_pattern \.(jpg|png|gif|js|css|mp3|mp4) 1440 20% 2880 ignore-reloadvisible_hostname river.com#如果没有配置这个启动会提示文件不存在3、启动
/etc/init.d/squid start
4、在chrome浏览器配置代理后抓包
yum install -y tcpdump
tcpdump -nn port 3128
生成实时数据
15:31:37.555550 IP 10.10.13.243.53945 > 10.10.13.247.3128: Flags [P.], seq 8938:9045, ack 1, win 256, length 107
15:31:37.555557 IP 10.10.13.247.3128 > 10.10.13.243.53945: Flags [.], ack 9045, win 274, length 0
15:31:37.780735 IP 10.10.13.243.53929 > 10.10.13.247.3128: Flags [F.], seq 230, ack 1, win 256, length 0
15:31:37.802758 IP 10.10.13.247.3128 > 10.10.13.243.53945: Flags [P.], seq 1:1011, ac
说明代理成功
也可以查看缓存目录,已生成缓存
/var/spool/squid/00/00/:
00000000 00000003 00000006 00000009 0000000C 0000000F 00000012
00000001 00000004 00000007 0000000A 0000000D 00000010 00000013
00000002 00000005 00000008 0000000B 0000000E 00000011
也可以使用curl访问,返回值200
curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
5、设置访问白名单添加以下

acl http proto HTTP
acl good_domain dstdomain .test.com .aaa.com .bbb.com .baidu.com
http_access allow good_domain
http_access deny !good_domain
squid -kcheck#检测配置有没有错
squid -kre#重新加载
#如果提示cache_mem is large than total disk cache sapace需要调整cache_mem 大小使其小于cache_dir的内存
curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK#www.baidu.comd在白名单里面所以访问正常
curl -x127.0.0.1:3128 www.qq.com -I
HTTP/1.0 403 Forbidden
Server: squid/3.1.23
Mime-Version: 1.0
Date: Wed, 01 Jun 2016 08:12:03 GMT
Content-Type: text/html#www.qq.com不在白名单里所以禁止访问
二、squid反向代理
1、编辑配置文件修改以下位置
将http_port 3128修改成
http_port 80 accel vhost vport
增加以下
cache_peer 183.232.231.26 parent 80 0 originserver name=a(要知道百度的真实ip)
cache_peer_domain a www.baidu.com(对a进行定义)
cache_peer 120.198.201.156 parent 80 0 originserver name=bcache_peer_domain b www.qq.com (对b定义)如果取消这些定义那将只能访问百度和QQ
#acl http proto HTTP
#acl good_domain dstdomain .test.com .aaa.com .bbb.com .baidu.com
#http_access allow good_domain
#http_access deny !good_domain #取消黑名单限制
2、关闭Nginx
/etc/init.d/nginx stop
3、检查配置重新加载
squid -kch
squid -kreload
4、查看是否启动测试
netstat -lnp |grep squid
5、
curl -x127.0.0.1:80 www.qq.com -I
HTTP/1.0 200 OK
curl -x127.0.0.1:80 www.baidu.com -I
HTTP/1.0 200 OK
curl -x127.0.0.1:80 www.taobao.com -I
HTTP/1.0 503 Service Unavailable
#www.baidu.com 和 www.qq.com都可以访问 www.taobao.com就访问不了了

三、squid 日志不记录图片、js、css等静态文件
在squid.conf中加入:

acl nolog urlpath_regex -i \.css \.js \.swf \.jpg \.gif \.png \.jpeg
access_log /var/log/squid/access.log common !nolog

其中common 为日志格式

四、如何查看squid的缓存命中率

使用命令: squidclient -h host -p port mgr:info
比如: /usr/local/squid/bin/squidclient -h 127.0.0.1 -p 8080 mgr:info

使用这个命令的前提是,你在你的squid.conf 中配置了相关的选项
acl manager proto cache_object
http_access allow manager

五、squid代理加用户认证

用authentication helpers添加身份验证

有如下几种认证方式 :
=> NCSA: Uses an NCSA-style username and password file.
=> LDAP: Uses the Lightweight Directory Access Protocol
=> MSNT: Uses a Windows NT authentication domain.
=> PAM: Uses the Linux Pluggable Authentication Modules scheme.
=> SMB: Uses a SMB server like Windows NT or Samba.
=> getpwam: Uses the old-fashioned Unix password file.
=> SASL: Uses SALS libraries.
=> NTLM, Negotiate and Digest authentication

配置NCSA 认证

一、创建认证用户名/密码,用htpasswd
#htpasswd /etc/squid/passwd user1

复制代码
输入密码
New password:
Re-type new password:

二、确定squid是否支持authentication helper

yum 安装的
#rpm -ql squid | grep ncsa_auth

复制代码
输出:
/usr/lib64/squid/ncsa_auth

三、配置SQUID认证
# vi /etc/squid/squid.conf

加入验证部分内容:
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd //定义squid密码文件与ncsa_auth文件位置

auth_param basic children 15 //认证进程的数量

auth_param basic realm Squid proxy-caching web server

auth_param basic credentialsttl 2 hours //认证有效期

auth_param basic casesensitive off //用户名不区分大小写,可改为ON区分大小写

复制代码
添加 acl 验证用户:
acl ncsa_users proxy_auth REQUIRED

http_access allow ncsa_users

复制代码
四、重启squid生效
# /etc/init.d/squid restart

六、删除squid缓存

如何清除squid 缓存

1 首先在squid 的主配置文件中添加acl 列表,并允许受信任的主机有权限清除缓存
acl managercache src 192.168.1.145 127.0.0.1
acl Purge method PURGE
http_access allow managercache Purge
http_access deny Purge
2 清除squid 中一条缓存
/usr/local/squid/bi/squidclient -h 192.168.1.145 -p80 -m PURGE http://www.linuxidc.com/404.html
3 批量清除squid 缓存中的文件
脚本 如下
#!/bin/sh
squidcache_path="/usr/local/squid/var/cache/"
squidclient_path="/usr/local/squid/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p80 $url
done
注:squidcache_path 是squid 缓存路径
squidclient_path 是squidclient 命令的 路径

-p 是指定squid 监听的端口
并给clearcache.sh 执行权限
#chmod +x clearcache.sh

4 使用方法
用法:

  1、清除所有Flash缓存(扩展名.swf):
./clear_squid_cache.sh swf

  2、清除URL中包含sina.com.cn的所有缓存:
./clear_squid_cache.sh sina.com.cn

  3、清除文件名为zhangyan.jpg的所有缓存:
./clear_squid_cache.sh zhangyan.jpg

七、利用Squid实现防盗链

在Squid里就是在配置文件添加acl控制,在squid.conf中的acl段添加如下配置:acl has_referer referer_regex .
acl allow_referer referer_regex -i baidu\.com
acl allow_referer referer_regex -i google\.com
acl allow_referer referer_regex -i yahoo\.cn
acl allow_referer referer_regex -i google\.cn

http_access allow !has_referer
http_access deny !allow_referer
deny_info http://img1.test.com/images/noposter.jpg allow_referer解释一下,has_referer匹配Referer存在,然后利用!has_referer来匹配没有Referer即直接访问的请求,这部分请求不予做防盗链处理,allow。allow_referer即允许使用源站资源的网站,然后利用!allow_referer来匹配不在允许列表的网站,这些不允许的Referer过来的请求就返回deny_info的内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  squid安装