欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux系统中Squid代理服务器配置全过程解析

程序员文章站 2022-03-03 22:47:37
这篇文章主要介绍了Linux系统中Squid代理服务器配置的全过程,Squid支持缓存多种不同的网络对象,性能很好,需要的朋友可以参考下... 16-01-30...

什么是squid?

squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向squid发出一个申请,要squid替它下载,然后squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,squid 可以代理http, ftp, gopher, ssl 和 wais 协议.

使用squid的好处:快速响应,减少网络阻塞,增强访问控制,提高安全性.可以针对特定的网站,用户,网络,数据类型实施访问控制.

squid有3种代理方式:普通代理模式,透明代理模式,反向代理模式

1.普通代理模式

   一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的ip地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。


2.透明代理模式

   透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的ip和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的http(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于linux操作系统来说,透明代理使用iptables或者ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于isp(internet服务器提供商)特别有用。

3.反向代理模式

    反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始web服务器的负载,又称http加速器。反向代理服务器承担了对原始web服务器的静态页面的请求,它是一种通过在繁忙的web服务器和internet之间增加一个高速的web缓冲服务器(即:web反向代理服务器)来降低实际的web服务器的负载.web服务器加速(反向代理)是针对web服务器提供加速功能的。它作为代理cache,但并不针对浏览器用户,而针对一台或多台特定web服务器。只要将reverse proxy cache设备放置在一台或多台web服务器前端即可。当互联网用户访问某个web服务器时,通过dns服务器解析后的ip地址是reverse proxy server的ip地址,而非原始web服务器的ip地址,这时reverse proxy server设备充当web服务器,浏览器可以与它连接,无需再直接与web服务器相连。因此,大量web服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度。


以下是squid反向代理实验

有2台服务器,1台http server 10.1.1.200,端口80,有2个虚拟机主机www.testone.com www.testtwo.com提供服务

另一台squid server为反向代理服务器,10.1.6.200

客户机ip:10.1.6.173

测试: 客户机访问通过squid server 访问http server. 这里需要在客户机上修改/etc/hosts,添加二行10.1.6.200 www.testone.com
10.1.6.200 www.testtwo.com(为了让客户机能够解析这2个域名对应ip为10.1.6.200 squid反向代理服务器的ip,监听端口默认是3128)

squid server 修改/etc/hosts,添加二行10.1.1.200 www.testone.com
10.1.1.200 www.testtwo.com


安装squid

复制代码
代码如下:

root@10.1.6.200:~# apt-get install squid

配置squid

复制代码
代码如下:

root@10.1.6.200:~# vim /etc/squid/squid.conf
http_port 3128 #http_port告诉squid在哪个端口监听http请求,默认3128
http_port 10.1.6.200:80 vhost #这里vhost支持虚拟主机
cache_dir aufs /opt/squid/cache 200 16 256 #缓存目录的设置,语法:<目录> <mb大小> <dir1> <dir2>


复制代码
代码如下:

#定义acl(访问控制列表),语法为:acl <acl 名称> <acl类型> <配置的内容>
acl all src all
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
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 safe_ports port 80
acl purge method purge
acl connect method connect
acl manager proto cache_object


复制代码
代码如下:

#利用前面定义的acl,定义访问控制规则
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !safe_ports
http_access allow all


复制代码
代码如下:

cache_mem 200 mb #如果物理内存很大,尽量设置大些
maximum_object_size 20 mb #最大缓存块
maximum_object_size_in_memory 5 mb #与内存保存资料有关的配置


复制代码
代码如下:

#虚拟机主机代理配置,如从客户端访问www.testone.com,则squid向www.testone.com的80端口发送请求.
cache_peer www.testone.com parent 80 0 no-query originserver name=one
cache_peer www.testtwo.com parent 80 0 no-query originserver name=two
cache_peer_domain one www.testone.com
cache_peer_domain two www.testtwo.com


复制代码
代码如下:

#设置squid用户及用户组
cache_effective_user proxy
cache_effective_group proxy


复制代码
代码如下:

#下面是关于日志文件
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log none


复制代码
代码如下:

mime_table /usr/share/squid/mime.conf
pid_filename /var/log/squid/squid.pid

 
复制代码
代码如下:

coredump_dir /var/spool/squid

设置缓存目录权限为proxy,否则启动会提示没有权限

复制代码
代码如下:

root@10.1.6.200:opt# chown -r proxy:proxy squid/
root@10.1.6.200:opt# ll
total 8
drwxr-xr-x 3 proxy proxy 4096 2013-02-21 22:42 squid

在开启squid服务之前,先检查配置文件是否正确:(假如看不输出,配置文件有效)

root@10.1.6.200:opt# squid -k parse

初始化cache目录,即建立缓存目录的存储格式(在初次运行squid之前,或者增加了新的cache_dir,必须初始化cache目录),cache目录初始化可能花费一些时间,依赖cache目录的大小和数量,要观察详细过程可以加-x选项.

复制代码
代码如下:

root@10.1.6.200:squid# squid -z
2013/02/22 20:31:10| creating swap directories

启动squid服务

复制代码
代码如下:

root@10.1.6.200:squid# /etc/init.d/squid start
starting squid http proxy: squid.
root@10.1.6.200:squid# netstat -tunlp
active internet connections (only servers)
proto recv-q send-q local address foreign address state pid/program name
tcp 0 0 0.0.0.0:39360 0.0.0.0:* listen 1383/rpc.statd
tcp 0 0 127.0.0.1:833 0.0.0.0:* listen 1929/famd
tcp 0 0 0.0.0.0:111 0.0.0.0:* listen 1372/portmap
tcp 0 0 10.1.6.200:80 0.0.0.0:* listen 2491/(squid)
tcp 0 0 0.0.0.0:22000 0.0.0.0:* listen 1623/sshd
tcp 0 0 0.0.0.0:3128 0.0.0.0:* listen 2491/(squid)
tcp 0 0 127.0.0.1:25 0.0.0.0:* listen 1890/exim4
udp 0 0 0.0.0.0:58152 0.0.0.0:* 2491/(squid)
udp 0 0 0.0.0.0:3130 0.0.0.0:* 2491/(squid)
udp 0 0 0.0.0.0:711 0.0.0.0:* 1383/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1372/portmap
udp 0 0 0.0.0.0:59518 0.0.0.0:* 1383/rpc.statd

这里不详细讲解http server 10.1.1.200配置虚拟主机过程,已分别配置好www.testone.com,www.testtwo.com虚拟主机
Linux系统中Squid代理服务器配置全过程解析

Linux系统中Squid代理服务器配置全过程解析

查看http server日志,会发现是squid server ip 请求数据.

复制代码
代码如下:

root@10.1.1.200:apache2# tail -f www.testone.com_access.log
10.1.6.200 - - [22/feb/2013:20:47:17 +0800] "get / http/1.0" 304 - "-" "mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; qqdownload 734; .net4.0c; .net clr 2.0.50727; .net clr 3.0.4506.2152; .net clr 3.5.30729)"


复制代码
代码如下:

root@10.1.1.200:apache2# tail -f www.testtwo.com_access.log
10.1.6.200 - - [22/feb/2013:20:49:07 +0800] "get / http/1.0" 304 - "-" "mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; qqdownload 734; .net4.0c; .net clr 2.0.50727; .net clr 3.0.4506.2152; .net clr 3.5.30729)"

以下是整个访问原理过程:

     1.当客户端在浏览器输入:www.testone.com 通过本地/etc/hosts解析,域名www.testone.com对应的ip是10.1.6.200(squid反向代理服务器),于是客户端向squid反向代理服务器默认3128端口发送请求,注意:在客户端输入www.testone.com和http://10.1.6.200是不一样的,如果是通过ip请求,则不能实现让squid服务器对内部网络多个服务器代理,需要使用域名方式.在 配置 squid 时,有两个选项,cache_peer 和 cache_peer_domain,这两个配置项让 squid 有能力知道www.testone.com这个请求最终是想访问http服务器10.1.1.200的80端口,从而实现了 squid 对内部多个服务器作代理的功能需求。

     2.squid服务器收到客户端发来的请求,一看是www.testone.com,从配置它知道请求http服务器10.1.1.200的80端口.

     3.http服务器提供服务监听80端口,收到squid发送来的请求,于是根据请求发送相应数据给squid服务器.

     4.squid收到http服务器从80端口发送过来的数据后,会将该数据在本地缓存,同时将数据从自己的3128发送给客户端10.1.6.173.