1、1详细解析用 Squid 实现反向代理的方法代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的 IP 地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的代理服务是不能实现的,需要使用反向代理来实现。 本文将详细介绍反向代理服务的概念以及如何利用反向代理服务器提高 WEB 服务器的性能和安全性。一反向代理的概念什么是反向代理呢?其实,反向代理也就是通常所说的 WEB 服务器加速,它是一种通过在繁忙的 WEB 服务器
2、和 Internet 之间增加一个高速的 WEB 缓冲服务器(即:WEB 反向代理服务器)来降低实际的 WEB 服务器的负载。典型的结构如下图所示:Web 服务器加速(反向代理)是针对 Web 服务器提供加速功能的。它作为代理 Cache,但并不针对浏览器用户,而针对一台或多台特定 Web 服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将 Reverse Proxy Cache 设备放置在一台或多台 Web 服务器前端即可。当互联网用户访问某个 WEB 服务器时,通过 DNS 服务器解析2后的 IP 地址是 Reverse Proxy Server 的 IP 地址,而非原
3、始 Web 服务器的 IP 地址,这时 Reverse Proxy Server 设备充当 Web 服务器,浏览器可以与它连接,无需再直接与 Web 服务器相连。因此,大量 Web 服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和 web 服务器直接通信带来的安全隐患,而且能够很大程度上减轻 web 服务器的负担,提高访问速度。二 反向代理和其它代理的比较下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:1 标准的代理缓冲服务器一个标准的代理缓冲服务被用于缓存静态的网页(例如:html 文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存
4、的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原 web 站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的 IP 地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程 web 服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。2 透明代理缓冲服务器透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不
5、需指明代理服务器的 IP 和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的 HTTP(80 端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程 web 服务器发出请求,其余操作和标准的代理服务器完全相同。对于 Linux 操作系统来说,透明代理使用 Iptables 或者 Ipchains 实现。因为不需要对浏览器作任何设置,所以,透明代理对于 ISP(Internet 服务器提供商)特别有用。33 反向代理缓冲服务器反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始 WEB 服务器的负载。反向代理服务器承担了对原始 WEB
6、服务器的静态页面的请求,防止原始服务器过载。它位于本地 WEB 服务器和 Internet 之间,处理所有对 WEB 服务器的请求,组织了 WEB 服务器和 Internet 的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向 WEB 服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向 WEB 服务器的请求数从而降低了 WEB 服务器的负载。三反向代理工作原理反向代理服务器位于本地 WEB 服务器和 Internet 之间,如下图所示:当用户浏览器发出一个 HTTP 请求时,通过域名解析将请求定向到反向代理服
7、务器(如果要实现多个 WEB 服务器的反向代理,需要将多个 WEB 服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP 之类的程序不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:Last-Modified: 告诉反向代理页面什么时间被修改4Expires: 告诉反向代理页面什么时间应该从缓冲区中删除Cache-Control: 告诉反向代理页面是否应该被缓冲Pragma: 告诉反向代理页面是否应该被缓冲.例如:在默认情况下,A
8、SP 页面返回” Cache-control: private.” ,所以 ASP 页面时不会在反向代理服务器缓存的四代理服务器软件 squid 简介Squid Internet Object Cache (Harvest Project 的后续版本 ) 是美国政府大力助的一项研究计划,其目的为解决网络带宽不足的问题,是现在 Unix 系统上使用者最多功能也最完整的一套软体。Apache 和 Netscape 虽附有相关的 Proxy 模块,但因其功能简单而不够普及。有关 squid 的详细说明可到 squid 网站(http:/www.squid-cache.org)查询。Squid 最典型
9、的应用是代理局域网的机器联入互联网,它支持现在流行的网络协议。Squid 的另一项非常出色的功能就是实现反向代理功能。五使用 Squid 配置反向代理(HTTP 加速器)通过 squid 配置反向代理主要就是配置 “squid.conf”这个配置文件。下面以 Linux 操作系统为例进行介绍,其它版本的在 UNIX 也同样适用。在 Linux 中 squid 如果是以源代码方式安装的话,这个文件一般在“/usr/local/squid/etc/”目录下。如果是系统自带的 squid,一般配置文件在“/etc/squid/” 目录下。1 Squid 反向代理单个后台 WEB 服务器如果 WEB
10、服务器和反向代理服务器是两台单独的机器(一般的反向代理应该有两块网卡分别连接了内外部网络)。那么,应该修改下面的内容来设置反向代理服务。http_port 80 # squid 监听的端口httpd_accel_host 172.16.250.250 # 内部 WEB 服务器的 IP 地址httpd_accel_port 80 # WEB 服务器的 IP 地址5httpd_accel_single_host on # 转发为缓冲的请求到一台单独的机器httpd_accel_with_proxy on #httpd_accel_uses_host_header off如果 WEB 服务器和反向代
11、理服务器是同一台机器。那么,应该设置 WEB 服务器的监听端口为非 80 端口(比如:81 端口)。要修改的内容如下:http_port 80 # squid 监听的端口httpd_accel_host localhost # 内部 WEB 服务器的 IP 地址httpd_accel_port 81 # WEB 服务器的 IP 地址httpd_accel_single_host on # 转发为缓冲的请求到一台单独的机器httpd_accel_with_proxy on #httpd_accel_uses_host_header off 下面解释一下配置指令。http_port 80选项 ht
12、tp_port 指定 squid 监听 HTTP 请求的端口,一般都设置成 80 端口,这样使用户感觉不到反向代理的存在,就像访问真正的 WEB 服务器一样。httpd_accel_host 172.16.250.250 和 httpd_accel_port 80选项 httpd_accel_host 和 httpd_accel_port 指定 WEB 服务器的 IP 地址和端口号,可以根据自己的 WEB 服务器的实际情况而定。 httpd_accel_single_host on选项 httpd_accel_single_host 为 on 时,squid 被设置成仅对单一的 web 服务器
13、作反向代理。不考虑 HTTP 头信息,Squid 转发所有的未被缓冲的页面请求到这个 web 服务器。如果 squid 需要做多个 web 服务器反向代理,必须将此选项设置为 off,并且使用转向器或者 DNS 去映射请求到合适的后台 WEB 服务器。httpd_accel_with_proxy on6如果希望 squid 既作反向代理服务器又作本地机器的上网代理,需要将 httpd_accel_with_proxy 改为 on,默认情况下是 offhttpd_accel_uses_host_header off在 HTTP 协议 1.1 中,HTTP 请求包括一个主机头信息,指定 URL 的
14、主机名或者主机的 IP 地址。这个选项可以用来完成多个后台 WEB 服务器的反向代理功能。2Squid 反向代理多个后台 WEB 服务器我们可以用 Squid 反向代理多个后台 WEB 服务器。例如:我们可以配置 squid 同时反向代理 , , 三个后台 WEB 服务器,示意图如下:Squid 的配置如下:httpd_accel_host virtualhttpd_accel_port 80httpd_accel_single_host offhttpd_accel_uses_host_header on(注意:编译 Squid 时需激活 Internal DNS 选项) 然后设置设置反响
15、代理需要的域名解析(Internet 用户通过这里解析三个网站的域名)如下: 202.102.240.74 使三个域名都指向反向代理服务器的 IP 地址 202.102.240.74。下面设置反向代理所需要的 DNS 入口信息(即设置内部 DNS,仅仅是 squid 在内部使用,Internet 用户不可见)。有两种方法可以设置内部 DNS,使用内部 DNS 服务器来解析或者使用/etc/hosts 文件来实现。使用内部 DNS 服务器的资源记录如下: IN A IN A IN A 172.16.1.4 如果使用/etc/hosts 文件来实现内部 DNS(编译时应使用 disable internal dns 选项),编辑/etc/hosts 文件添加如下条目:172.16.1.2 172.16.1.3 172.16.1.4 结论通过本文中的论述和相关实例,可以看出,反向代理方式不单是一种 WEB 服务器加速器,而且使也一种对外提供 Web 发布时使用的有效的防火墙技术,使用它不但能节约紧缺的 IP 地址资源,加速 WEB 服务器的访问速度,而且能够保护 WEB 主机,因此能够适应多种应用场合。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。