Squid 代理服务器

13.1.1缓存代理概述

作为应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能。

1.代理的工作机制

       当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已 经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机:如果缓存中没有客户机要访问 的页面,则由代理服务器向lnternet发送访问请求,获得返回的Web页面以后,将网页数据保存到缓 存中并发送给客户机,如图13.1所示。

Squid 代理服务器_第1张图片

       HTTP代理的缓存加速对象主要是文字、图像等静态Web元素,使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向hnternet提交重复的Web请求的过程,提高了客户机的Web 访问响应速度。

       由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP 地址,起到一定的保护作用,另一方面,代理服务器担任着类似“经纪人”的角色,可以针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制。

2.代理的基本类型

根据实现方式不同,代理服务可分为传统代理透明代理两种常见的代理服务。

       

       传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件 等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发给指定的代理服务器。

       透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由,防火墙策略将Web访问重定向,实际仍然交给代理服务器来处理,重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己在使用代 理服务,所以称为透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请求将优 先发给DNS服务器。

13.1.2安装及运行控制

下面以Squid 3.5.23版为例,介绍其安装和运行控制。

1.编译安装Squid 配置

Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需要来定, 配置前可参考“./configure --help”给出的说明。

[root@node01 ~]# mount /dev/cdrom /mnt/
[root@node01 ~]# ftp 172.16.37.13

ftp> cd 软件下载/y2/y2c
ftp> get squid-3.5.23.tar.gz

Squid 代理服务器_第2张图片

Squid 代理服务器_第3张图片

Squid 代理服务器_第4张图片

[root@node01 ~]# tar zxf squid-3.5.23.tar.gz 
[root@node01 ~]# cd squid-3.5.23/
[root@node01 squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-async-io=240 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gnuregex
[root@node01 squid-3.5.23]# make
[root@node01 squid-3.5.23]# make install

上述选项含义如下。

--prefix=/usr/local/squid:安装目录。

--sysconfdir=/etc:单独将配置文件修改到其他目录。

--enable-linux-netfilter:使用内核过滤。  

--enable-async-io=值:异步I/O,提升存储性能,相当于--enable-pthreads --enable-storeio=ufs,aufs --with -pthreads --with-aufs-thread=值"。

--enable-default-err-language=Simplify_Chinese:错误信息的显示语言。

--diseble-poll与--enable-epoll:关闭默认使用poll模式,开启epoll模式提升性能。

--enable-gnuregex:使用GNU正则表达式。

安装完后,创建链接文件、创建用户和组。

[root@node01 squid-3.5.23]# cd
[root@node01 ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@node01 ~]# useradd -M -s /sbin/nologin squid
[root@node01 ~]# chown -R squid:squid /usr/local/squid/var/

2.Squid 的配置文件

      Squid 服务的配置文件位于/etc/squid.conf,充分了解配置行的作用将有助于管理员根据实际情 况灵活配置代理服务。

[root@node01 ~]# vim /etc/squid.conf

http_port 3128  //用来指定代理服务监听的地址和端口(默认的端口号为3128)

cache_effective_user squid //这一项指定squid的程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功!
cache_effective_group squid

添加以下两行内容 

Squid 代理服务器_第5张图片

       默认情况下,配置文件中不包括 cache_effective_user 与cache_effective_group 配置项,需要手 动添加。

3.Squid的运行控制

1)检查配置文件语法是否正确

[root@node01 ~]# squid -k parse

2)启动、停止Squid 第一次启动Squid 服务时,会自动初始化缓存目录,在没有可用的Squid 服务脚本的情况下,也 可以直接调用Squid程序来启动服务,这时需要先进行初始化。

[root@node01 ~]# squid -z  //-z选项用来初始化缓存目录
[root@node01 ~]# squid  //启动squid服务

确认 Squid 服务处于正常监听状态。

[root@node01 ~]# netstat -anpt | grep "squid"

3)使用Squid服务脚本

为了使Squid服务的启动,停止.重载等操作更加方便,可以编写Squid服务脚本,并使用chkconfig 和systemctl 工具来进行管理。

[root@node01 ~]# vim /etc/init.d/squid

#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - Internet Object Cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
  start)
      netstat -anpt | grep squid &> /dev/null
	  if [ $? -eq 0 ]
	  then
	    echo "Squid is running"
		  else
		echo "正在启动squid..."
		$CMD
	  fi
  ;;
  stop)
       $CMD -k kill &> /dev/null
	   rm -rf $PID &> /dev/null
  ;;
  status)
       [ -f $PID ] &> /dev/null
	         if [ $? -eq 0 ]
			   then
	   netstat -anpt | grep squid
	         else
			   echo "Squid is not running."
			 fi
  ;;
  restart)
      $0 stop &> /dev/null
	   echo "正在关闭squid..."
	           $0 start &> /dev/null
	   echo "正在启动squid..."
  ;;
  reload)
      $CMD -k reconfigure
  ;;
  check)
	  $CMD -k parse
  ;;
  *)
       echo "用法:$0 {start | stop | restart | reload | check | status}"
  ;;
esac


[root@node01 ~]# chmod +x /etc/init.d/squid 
[root@node01 ~]# chkconfig --add squid
[root@node01 ~]# systemctl restart squid

Squid 代理服务器_第6张图片

     

      这样一来,就可以通过Squid脚本来启动、停止、重启、重载Squid服务器了,方法是在执行 /etc/init.d/squid 脚本时添加相应的start、stop、restart参数或通过systemctl 命令控制Squid 服务。

 

客户机成功访问网络

 Squid 代理服务器_第7张图片

Squid 代理服务器_第8张图片

Squid 代理服务器_第9张图片

你可能感兴趣的:(前端,服务器,运维)