CleverCode最近研究了一下squid的安装与配置。现在总结一下。分享给大家。

 

1 简介

 

代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。

Squid是一个缓存Internet 数据的软件,其接收用户的申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid 发出一个申请,要Squid 代替其进行下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传给用户,使用户觉得速度相当快。Squid 可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议并且Squid 可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。

1.1 工作流程

当代理服务器中有客户端需要的数据时:
a. 客户端向代理服务器发送数据请求;
b. 代理服务器检查自己的数据缓存;
c. 代理服务器在缓存中找到了用户想要的数据,取出数据;
d. 代理服务器将从缓存中取得的数据返回给客户端。

当代理服务器中没有客户端需要的数据时:
1. 客户端向代理服务器发送数据请求;
2. 代理服务器检查自己的数据缓存;
3. 代理服务器在缓存中没有找到用户想要的数据;
4. 代理服务器向Internet 上的远端服务器发送数据请求;
5. 远端服务器响应,返回相应的数据;
6. 代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

\


Squid代理服务器工作在TCP/IP的应用层。

\


1.2 Squid 分类

按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。

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

透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;

反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

 

2 系统环境

操作系统:CentOS release 6.5 (Final)
Squid版本:squid-2.7.STABLE9-20101125.tar.gz
本次安装squid软件下载地址:

http://download.csdn.net/detail/clevercode/9337437。

 

3 安装步骤

安装前确保进行安装Linux常备支持库,否则会出现各种错误!Linux中必备常用支持库的安装详解:http://blog.csdn.net/clevercode/article/details/45438401。

1)解压squid-2.7.STABLE9-20101125.tar.gz
# cd /usr/local/src/squid
# tar zxvf squid-2.7.STABLE9-20101125.tar.gz

2)进入解压后的目录
# cd squid-2.7.STABLE9-20101125

3)配置
# ./configure --prefix=/usr/local/squid \
--enable-gnuregex --disable-carp --enable-async-io=240 \
--with-pthreads --enable-storeio=ufs,aufs,diskd \
--disable-wccp --enable-icmp --enable-kill-parent-hack \
--enable-cachemgr-hostname=localhost \
--enable-default-err-language=Simplify_Chinese \
--with-maxfd=65535 --enable-epoll \
--enable-linux-netfilter --enable-large-cache-files \
--enable-default-hostsfile=/etc/hosts --with-dl \
--with-large-files --enable-delay-pools --enable-snmp \
--enable-arp-acl --prefix=/usr/local/squid

4) 编译
# make

5) 安装
# make install

6)配置用户属组 创建、初始化目录:
# groupadd www #添加www组
# useradd -g www www -s /bin/false #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统

# mkdir -p /data0/cache/logs/
# chmod 755 /data0/cache/ -R
# chown www.www /data0/cache -R

 

 

4 实际应用


4.1 普通代理服务

即标准的、传统的代理服务,需要客户机在浏览器中指定代理服务器的地址、端口。
请参考:http://www.cnblogs.com/mchina/p/3812190.。

4.2 透明代理服务

适用于企业的网关主机,客户机不需要指定代理服务器地址、端口等信息,通过iptables将客户机的Web访问数据转交给代理服务程序处理。
请参考:http://www.cnblogs.com/mchina/p/3812190.html。

4.3反向代理服务

为Internet用户访问企业Web站点提供缓存加速。

 

 

4.3.1 需求背景

下面实验将模拟通过不同的域名访问不同的机器,简单实现企业应用中的负载均衡。
客户端在浏览器地址栏中输入pic.domain.com,pic2.domain.com,将访问192.168.142.130这台机器,
访问res.domain.com res2.domain.com,将访问192.168.142.131这台机器。

 

squid服务器:192.168.142.133。

web服务器:192.168.142.130 与192.168.142.131。

\

 

4.3.2 配置squid.conf

 

# cd /usr/local/squid/etc/
# mv squid.conf squid.conf.bak

# vi /usr/local/squid/etc/squid.conf

 

#主机名
visible_hostname   static.squid-133

#设置监听的IP与端口号
http_port 80 vhost vport

#额外提供给squid使用的内存,squid的内存总占用为 X * 10+15+“cache_mem”,其中X为squid的cache占用的容量(以GB为单位)
#比如下面的cache大小是100M,即0.1GB,则内存总占用为0.1*10+15+64=80M,推荐大小为物理内存的1/3-1/2或更多。 
cache_mem 4096 MB

#设置squid磁盘缓存最大文件,超过2M的文件不保存到硬盘
maximum_object_size_in_memory 2048 KB

#使用lru表示:它只替换长时间没有被访问过的对象
memory_replacement_policy lru

#此记录文件用来记录缓冲对象的添加,删除情况(一般可设置为:cache_store_log none,
#来降低日志文件占用的磁盘空间,这一点请特别注意。)
cache_store_log none

#log文件日志格式
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %

 

4.3.3 初始化配置

# /usr/local/squid/sbin/squid -z

看到以下提示初始化正常。
2015/12/08 04:03:34| Creating Swap Directories

 

 

4.3.4 启动

 

# 后台启动

# /usr/local/squid/sbin/squid -s

4.3.5 访问

1)通过访问http://res.domain.com/comm.js。可以到看到res.domain.com是指向了192.168.142.133。但是实际取出js文件是从192.168.142.131服务器中取得。

\

2)修改comm.js 成为如下内容。但是发现访问comm.js内容还是没有变。

#vi comm.js

this is from 192.168.142.131 js! i am change !

\

3)清除133缓存,再访问数据就变了。

# /usr/local/squid/bin/squidclient -m PURGE -p 80 "http://res.domain.com/comm.js"

\

4)改变URL也会是数据变化。squid缓存的key可以理解为url的md5。只要url发生了变化,那么数据就会发生编号。

如图访问:http://res.domain.com/comm.js?r=123456。

\

5 )访问图片

\

5 squid常用管理命令

# /usr/local/squid/sbin/squid -z 初始化缓存空间
# /usr/local/squid/sbin/squid 前台启动 (用于输出调试)
# /usr/local/squid/sbin/squid -s 后台启动
# /usr/local/squid/sbin/squid -k shutdown 停止
# /usr/local/squid/sbin/squid -k reconfigure 重新载入配置文件
# /usr/local/squid/sbin/squid -k parse 检查conf
# /usr/local/squid/sbin/squid -k rotate 优化碎片

# /usr/local/squid/bin/squidclient -p 80 mgr:info 查看squid命中情况
# /usr/local/squid/bin/squidclient -m PURGE -p 80 "http://res.domain.com/comm.js" 删除指定URL缓存