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

退出跑吧保干安

退出跑吧保干安

2016-03-31 15:14

下面图老师小编跟大家分享一个简单易学的Linux系统中Squid代理服务器配置全过程解析教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

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

   什么是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

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  root@10.1.6.200:~# apt-get install squid

  配置squid

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  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 #缓存目录的设置,语法:目录

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  #定义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

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  acl Safe_ports port 80

  acl purge method PURGE

  acl CONNECT method CONNECT

  acl manager proto cache_object

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  #利用前面定义的acl,定义访问控制规则

  http_access allow manager localhost

  http_access deny manager

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  http_access allow purge localhost

  http_access deny purge

  http_access deny !Safe_ports

  http_access allow all

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  cache_mem 200 MB #如果物理内存很大,尽量设置大些

  maximum_object_size 20 MB #最大缓存块

  maximum_object_size_in_memory 5 MB #与内存保存资料有关的配置

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  #虚拟机主机代理配置,如从客户端访问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

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  #设置squid用户及用户组

  cache_effective_user proxy

  cache_effective_group proxy

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  #下面是关于日志文件

  access_log /var/log/squid/access.log squid

  cache_log /var/log/squid/cache.log

  cache_store_log none

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  mime_table /usr/share/squid/mime.conf

  pid_filename /var/log/squid/squid.pid

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  coredump_dir /var/spool/squid

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

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  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选项.

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  root@10.1.6.200:squid# squid -z

  2013/02/22 20:31:10| Creating Swap Directories

  启动squid服务

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  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虚拟主机

2016130120749868.jpg (380×139)
2016130120815357.jpg (297×146)

  查看HTTP Server日志,会发现是Squid Server ip 请求数据.

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  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)"

  代码如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/fuwuqi/)

  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.

展开更多 50%)
分享

猜你喜欢

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

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

Linux系统下配置squid代理服务器的过程详解

服务器
Linux系统下配置squid代理服务器的过程详解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

高效配置Linux代理服务器Squid介绍

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
高效配置Linux代理服务器Squid介绍

用户认证功能的SQUID代理服务器

编程语言 网络编程
用户认证功能的SQUID代理服务器

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux代理服务器和防火墙配置详细解析

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux代理服务器和防火墙配置详细解析

RedHat打造代理服务器

电脑网络
RedHat打造代理服务器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

在Linux下通过命令行来操作使用Dropbox

在Linux下通过命令行来操作使用Dropbox

iphone删除facebook/twitter教程

iphone删除facebook/twitter教程
下拉加载更多内容 ↓