代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受外部网主机的***。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机***,一般的代理服务是不能实现的,需要使用反向代理来实现。

一.反向代理服务器概念

反向代理就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。

 

反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

Squid是一种在Linux系统下使用的优秀的代理服务器软件.

二.反向代理和其它代理的比较

下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:1. 标准的代理缓冲服务器

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

2. 透明代理缓冲服务器

 

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

 

3. 反向代理缓冲服务器

  反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

三.反向代理服务器的工作原理

 

当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。

四.代理服务器软件squid简介

Squid Internet Object Cache (Harvest Project的后续版本) 是美国政府大力助的一项研究计划,其目的为解决网络带宽不足的问题,是现在Unix系统上使用者最多功能也最完整的一套软体。ApacheNetscape虽附有相关的Proxy模块,但因其功能简单而不够普及。有关squid的详细说明可到squid网站(http://www.squid-cache.org)查询。

Squid 是一个万维网客户的高性能代理缓存服务器。它支持 FTPgopher 以及 HTTP 数据对象。与传统的缓存软件不同,Squid 只用一个非堵塞的 I/O 驱动的进程来处理所有请求。Squid 保存元数据,把特别热门的对象缓存在内存中;它还缓存 DNS 查寻,支持非堵塞 DNS 查寻,并对失败的请求实现负缓存。

Squid 由一个主服务器程序 squid,一个域名系统查寻程序 (dnsserver),一个用来检索 FTP 数据的程序 (ftpget),以及一些管理和客户工具组成。

五.使用squid实现反向代理,我们用一个案例来说明反向代理,在下面的拓扑中能够实现客户端主机通过反向代理访问内部网的主机资源,例如:Web站点

 

1)我们在linux系统中安装squid

1.挂载光盘到指定目录中,并安装squid软件包(服务器需要2块网卡,1块是(图中eth1)桥接用来连接外网,一块是(图中eth0host-only链接方式,用于和内网主机链接)

通过rpm来安装squid软件包

[root@localhost ~]# mkdir /mnt/cdrom         #新建光盘挂载点

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom  #把光盘挂载到挂载点

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/cdrom/Server         #切换到服务软件包上

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm   #安装squid软件包

warning: squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...                ########################################### [100%]

   1:squid                  ########################################### [100%]

 [root@localhost Server]# rpm -ql squid |less    #安装好后我们来查看文件存放路径

/etc/httpd/conf.d/squid.conf       #apache可以一起使用

/etc/logrotate.d/squid

/etc/pam.d/squid

/etc/rc.d/init.d/squid            #控制脚本

/etc/squid/squid.conf           #服务器的主要配置文件

/etc/squid/squid.conf.default     #如果配置文件不小心被删除,这个文件是配置文件模板

/usr/lib/squid                 #服务器的安装位置

/var/log/squid                 #日志存放位置

/var/spool/squid               #缓存存放

[root@localhost Server]# service squid start        #启动服务

init_cache_dir /var/spool/squid... 启动 squid.           [确定]

 #Squid的监听端口是tcp/3128    udp/3130

[root@localhost ~]# netstat -tupln |grep squid

tcp        0      0 0.0.0.0:3128                0.0.0.0:*                   LISTEN      4508/(squid)       

udp        0      0 0.0.0.0:44439               0.0.0.0:*                               4508/(squid)       

udp        0      0 0.0.0.0:3130                0.0.0.0:*                               4508/(squid)       

[root@localhost ~]#

2.squid服务器启动后,我们知道squid的主配置文件在/etc/squid/squid.conf中,我们对文件进行修改

http_access allow localhost

http_access allow all        #在大约635行,允许所有主机进行访问

http_port 192.168.102.44:80  vhost  #在大约919行,在外卡上进行监听,代理服务器相当于一个虚拟主机(vhost),客户端主机访问代理服务器的WWW网站,所以协议号80

 # cache_peer hostname type http-port icp-port [options]

#          For example,

                                         proxy  icp

       #          hostname             type     port   port  options

       #          -------------------- -------- ----- -----  -----------

 #       cache_peer parent.foo.net       parent    3128  3130  proxy-only default

 #       cache_peer sib1.foo.net         sibling   3128  3130  proxy-only

 #       cache_peer sib2.foo.net         sibling   3128  3130  proxy-only

         cache_peer 192.168.2.200       parent    80    0     originserver

#在大约1175行,cache_peer表示缓存邻居,内部WWW服务器是代理服务器的原始服务器,也是邻居,所以我们写上行记录,主机名字我们用WWWIP地址,类型是父亲关系,端口80,因为当客户端访问代理服务器时,如果缓存中有,则直接回复客户端,如果没有代理服务器会访问他的父亲也就是原始服务器的WWW,所以端口为80icp port我们写0optional为原始服务器。

2www服务器我用的是windows server 2003虚拟机,此虚拟机用host-only连接在客户端上配置IP地址,网关

 

我们来添加IISWEBFTP)程序

在开始→设置→控制面板→添加删除程序→选择添加删除windows组件→应用程序服务器→internet信息服务器→外维网服务→确定,然后开始安装