1. 什么是squid
Squid是一个支持HTTP、HTTPS、FTP等服务的缓存代理软件,它可以加快客户端网页浏览的速度,提高客户机的访问命中率,节省宝贵的带宽资源。squid不仅可以做正向代理,还可以利用反向代理技术提高网站访问性能,反向代理结合智能DNS解析就能实现一个最基本的CDN。
2. 搭建squid正向代理
正向代理一般用于企业内部访问外网,就是我们通常说的通过代理服务器上网,通过缓存页面数据可以节省带宽,提高上网速度。
squid官方网站为 http://www.squid-cache.org/,可以下载到最新的软件版本。
这里我们使用yum安装squid
yum install -y squid
清除squid.conf里的内容
> /etc/squid/squid.conf
vi /etc/squid/squid.conf
加入如下配置
http_port 3128
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
cache_dir aufs /data/cache 1024 16 256
cache_mem 128 MB
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \.(jpg|png|gif|mp3|xml) 1440 50% 2880 ignore-reload
refresh_pattern . 0 20% 4320
创建缓存目录
mkdir /data/cache
更改权限
chown -R squid:squid /data/cache
启动服务
/etc/init.d/squid start
测试:
curl -x192.168.1.1:3128 www.baidu.com
[[email protected] ~]# curl -x192.168.1.1:3128 www.163.com -I
HTTP/1.0 200 OK
Date: Fri, 28 Apr 2017 07:32:26 GMT
Server: openresty
Content-Type: text/html; charset=GBK
Vary: Accept-Encoding,User-Agent,Accept
Expires: Fri, 28 Apr 2017 07:33:46 GMT
Cache-Control: max-age=80
X-Via: 1.0 czdx86:5 (Cdn Cache Server V2.0), 1.0 xz53:4 (Cdn Cache Server V2.0)
Age: 5
X-Cache: HIT from www
X-Cache-Lookup: HIT from www:3128
Via: 1.1 cache.163.com:80 (squid), 1.0 www (squid/3.1.23)
Connection: keep-alive
返回状态码200,说明已经可以通代理服务器上网。
在ie里使用代理服务器需进行如下设置:
在IE里点[工具]->[Internet选项]->[连接]
找到"如果要为连接配置代理服器,请选择"设置",点[设置]
配置透明代理
普通代理需要在IE里设置代理服务器,比较麻烦,使用透明代理只需设置网关就OK了。
在squid服务器上做以下两步:
1) 打开端口转发
echo "1" > /proc/sys/net/ipv4/ip_forward
2)设置防火墙规则
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128
在windows电脑上配置网关,设置为代理服务器的ip地址即可直接上网
一些常用命令
squid -v 查看版本以及编译参数
squid -k check 可以检测配置文件是否有错
squid -k reconfig 可以重新加载配置
squid -z 初始化缓存目录,启动时会自动初始化
设置白名单
acl http proto HTTP
acl good_domain dstdomain .badu.com www.qq.com:
http_access allow http good_domain
http_access deny http !good_domain
设置黑名单
acl http proto HTTP
acl bad_domain dstdomain www.jd.com www.taobao.com
http_access deny http bad_domain
3. 搭建squid反向代理
先准备好一台web服务器,ip为192.168.1.1,
这里为一台nginx服务器,和squid装在同一台服务器上。
修改nginx端口号
vi /usr/local/nginx/conf/nginx.conf
找到
listen 80;
改成
listen 8080;
保存退出后重启
/etc/init.d/nginx restart
配置squid
vi /etc/squid/squid.conf
找到
http_port 3128
改为
http_port 80 accel vhost vport
增加如下内容:
cache_peer 192.168.1.1 parent 8080 0 originserver name=a
cache_peer_domain a www.test.com
保存退出后重启
/etc/init.d/squid restart
如果之前增加了黑/白名单相关配置去掉;
如果是squid要代理一台web上的所有域名,那么就写成这样:
cache_peer 192.168.1.1 parent 8080 0 originserver
只需要这一行,cache_peer_domain 都可以省掉。
测试前,绑定host
vi /etc/hosts
加上
192.168.1.1 www.test.com
测试:
curl www.test.com/1.png -I
[[email protected] ~]# curl www.test.com/1.png -I
HTTP/1.0 200 OK
Server: nginx/1.10.3
Date: Wed, 26 Apr 2017 18:39:32 GMT
Content-Type: image/png
Content-Length: 4425
Last-Modified: Wed, 26 Apr 2017 18:39:28 GMT
ETag: "5900e960-1149"
Accept-Ranges: bytes
Age: 35
X-Cache: HIT from www
X-Cache-Lookup: HIT from www:80
Via: 1.0 www (squid/3.1.23)
Connection: keep-alive
返回结果说明缓存已被命中,反向代理配置成功。