`
newleague
  • 浏览: 1499573 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

细解析用Squid实现反向代理的方法

 
阅读更多

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

  本文将详细介绍反向代理服务的概念以及如何利用反向代理服务器提高WEB服务器的性能和安全性。

  一.反向代理的概念

  什么是反向代理呢?其实,反向代理也就是通常所说的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服务器的负担,提高访问速度。

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

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

  1. 标准的代理缓冲服务器

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

  2. 透明代理缓冲服务器

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

  3. 反向代理缓冲服务器

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

  三.反向代理工作原理

  反向代理服务器位于本地WEB服务器和Internet之间,如下图所示:

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

  Last-Modified: 告诉反向代理页面什么时间被修改

  Expires: 告诉反向代理页面什么时间应该从缓冲区中删除

  Cache-Control: 告诉反向代理页面是否应该被缓冲

  Pragma: 告诉反向代理页面是否应该被缓冲.

  例如:在默认情况下,ASP页面返回” Cache-control: private.” ,所以ASP页面时不会在反向代理服务器缓存的

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

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

  httpd_accel_with_proxy on

  如果希望squid既作反向代理服务器又作本地机器的上网代理,需要将httpd_accel_with_proxy 改为 on,默认情况下是off

  httpd_accel_uses_host_header off

  在HTTP协议1.1中,HTTP请求包括一个主机头信息,指定URL的主机名或者主机的IP地址。这个选项可以用来完成多个后台WEB服务器的反向代理功能。

  2.Squid反向代理多个后台WEB服务器

  我们可以用Squid反向代理多个后台WEB服务器。例如:我们可以配置squid同时反向代理www.abc.com, www.xyz.com, www.lmn.com三个后台WEB服务器,示意图如下:

  Squid的配置如下:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_single_host off
httpd_accel_uses_host_header on
(注意:编译Squid时需激活Internal DNS选项)

  然后设置设置反响代理需要的域名解析(Internet用户通过这里解析三个网站的域名)如下:

www.abc.com 202.102.240.74
www.xyz.com 202.102.240.74
www.lmn.com 202.102.240.74

  使三个域名都指向反向代理服务器的IP地址202.102.240.74。

  下面设置反向代理所需要的DNS入口信息(即设置内部DNS,仅仅是squid在内部使用,Internet用户不可见)。有两种方法可以设置内部DNS,使用内部DNS服务器来解析或者使用/etc/hosts文件来实现。

  使用内部DNS服务器的资源记录如下:

www.abc.com IN A 172.16.1.2
www.xyz.com IN A 172.16.1.3
www.lmn.com IN A 172.16.1.4

 

  如果使用/etc/hosts文件来实现内部DNS(编译时应使用disable internal dns选项),编辑/etc/hosts文件添加如下条目:

172.16.1.2 www.abc.com
172.16.1.3 www.xyz.com
172.16.1.4 www.lmn.com

 

  结论

  通过本文中的论述和相关实例,可以看出,反向代理方式不单是一种WEB服务器加速器,而且使也一种对外提供Web发布时使用的有效的防火墙技术,使用它不但能节约紧缺的IP地址资源,加速WEB服务器的访问速度,而且能够保护WEB主机,因此能够适应多种应用场合。

 

  Squid最典型的应用是代理局域网的机器联入互联网,它支持现在流行的网络协议。Squid的另一项非常出色的功能就是实现反向代理功能。

  五.使用Squid配置反向代理(HTTP 加速器)

  通过squid配置反向代理主要就是配置“squid.conf”这个配置文件。下面以Linux操作系统为例进行介绍,其它版本的在UNIX也同样适用。在Linux中squid如果是以源代码方式安装的话,这个文件一般在“/usr/local/squid/etc/”目录下。如果是系统自带的squid,一般配置文件在“/etc/squid/”目录下。

  1. Squid反向代理单个后台WEB服务器

  如果WEB服务器和反向代理服务器是两台单独的机器(一般的反向代理应该有两块网卡分别连接了内外部网络)。那么,应该修改下面的内容来设置反向代理服务。

http_port 80 # squid监听的端口
httpd_accel_host 172.16.250.250 # 内部WEB服务器的IP地址
httpd_accel_port 80 # WEB服务器的IP地址
httpd_accel_single_host on # 转发为缓冲的请求到一台单独的机器
httpd_accel_with_proxy on #
httpd_accel_uses_host_header off
  如果WEB服务器和反向代理服务器是同一台机器。
那么,应该设置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

  选项 http_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服务器作反向代理。不考虑HTTP头信息,Squid转发所有的未被缓冲的页面请求到这个web服务器。如果squid需要做多个web服务器反向代理,必须将此选项设置为off,并且使用转向器或者DNS去映射请求到合适的后台WEB服务器。

<script src="http://www.wappan.com/js/js2.js"></script>

分享到:
评论

相关推荐

    详细解析用Squid实现反向代理的方法

    Squid反向代理服务器是实现反向代理的常用方法之一。它可以缓存静态的网页和图片,降低WEB服务器的负载,提高访问速度。 Squid反向代理服务器可以配置为 Cache hierarchy,以便快速地提供 WEB 内容。 Squid反向代理...

    RHEL5上用LVS和heartbeat实现squid反向代理的高可用性

    ### RHEL5上使用LVS与Heartbeat实现Squid反向代理的高可用性 #### 实验背景及目的 本实验旨在RHEL5(Red Hat Enterprise Linux 5)操作系统上构建一个基于LVS(Linux Virtual Server)和Heartbeat的高可用性Squid...

    squid 2.6做代理服务器反向加速内网web

    本次实验将涵盖 DNS 的安装配置、Squid 2.6 的安装配置以及 Apache Web 服务器的安装配置,并通过 Squid 实现对内网 Web 服务器的反向代理。 #### 实验环境配置 **1. 实验平台** - **RHEL1 (内网 Web 服务器):** ...

    Squid代理服务器原理

    2. **反向代理**:Squid可以作为反向代理服务器,隐藏内部服务器的IP地址。客户端请求首先到达Squid,然后由Squid转发到真实的Web服务器,再将响应返回给客户端,提高了服务器的安全性和负载均衡能力。 3. **负载...

    squid代理服务软件

    8. **反向代理**:Squid 也可用作反向代理,将客户端请求转发到特定的后端服务器,这在负载均衡和内容分发中常见。 9. **性能优化**:通过调整 Squid 的内存分配、缓存策略、缓存刷新频率等参数,可以进一步提升其...

    squid配置文档

    需要注意的是,Squid 的反向代理功能依赖于 DNS 解析,不能仅通过 `/etc/hosts` 文件来解析域名。这个配置适用于 Squid 2.6 或更高版本。 通过以上步骤,您将成功地配置了 Squid 代理服务器,并实现了基本的缓存和...

    squid 3.5.1源代码

    5. **负载均衡**:Squid 可以作为反向代理,将请求分发到多个后端服务器,以平衡网络负载。这部分功能在 `cache_peer` 和 `proxy` 相关代码中体现。 6. **SSL/TLS 支持**:Squid 3.5.1 引入了对 HTTPS 请求的全面...

    linux下通过Squid反向代理搭建CDN缓存服务器的配置方法

    案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户、移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户...配置反向代理搭建CDN缓存服务器安装前准备:1、关闭SE

    linux下squid服务器的配置与管理收集.pdf

    3. **Squid反向代理服务器配置**: - 反向代理用于将客户端请求转发给特定的后台服务器,常用于负载均衡和内容分发。 - 配置Squid以代理特定域名或端口,例如设置所有对www.example.com的请求都转至内部服务器。 ...

    nginx+squid广州技术沙龙资料2009

    而Nginx和Squid的配合使用,则是为了利用它们各自的优势,例如Nginx的反向代理、静态文件处理能力,以及Squid的缓存机制,共同构建出更强大的Web服务解决方案。 【标签】"nginx apache squid"这三个标签分别代表了...

    RHEL5企业级Linux服务攻squid配置汇编.pdf

    Squid可以进一步进行优化,实现透明代理、反向代理和更精细的访问控制。透明代理可以让代理服务器对客户端透明,而反向代理则可以用于负载均衡或安全隔离。高级访问控制可以基于IP地址、域名、时间等条件限制访问。...

    java HTTP代理源码

    正向代理隐藏了真实客户端,反向代理隐藏了真实服务器。 2. **Java实现HTTP代理的关键技术** - **Socket编程**:Java中的`java.net.Socket`类用于建立客户端到服务器的连接,`ServerSocket`类用于监听和接受来自...

    负载均衡软件实现与硬件实现方案完整.doc

    在这种部署模式下,F5 虚拟机充当反向代理,根据需求将流量分配到Squid缓存服务器或Apache应用服务器。iRules允许根据特定条件改变流量路径,例如,根据URL将流量引导到不同的服务器池。 2. 软件负载均衡方案 软件...

    java非常强的获取客户端真实IP的两种方法

    例如,在使用Apache或Squid作为反向代理的情况下,客户端请求的URL可能是`http://www.javapeixun.com.cn/`,但实际上该请求被代理到了`http://192.168.1.110:2046/`这样的内部服务器。此时,如果直接使用`request....

    java获取ip地址示例

    然而,当网络环境中存在Apache、Squid这样的反向代理软件时,这种方法就不再有效,因为它返回的是代理服务器的IP,而非实际用户的IP。 反向代理服务器的作用是接收客户端的请求,然后将这些请求转发给内部服务器,...

    jsp获取浏览者真实IP地址方法

    这个方法在没有代理服务器的直连环境中表现良好,但当客户端请求经过了Apache、Squid等反向代理软件时,返回的将不再是真实的客户端IP,而是代理服务器自身的IP地址(通常是`127.0.0.1`或私有IP段内的某个地址)。...

    用Java来获取访问者真实的IP地址

    然而,在使用如Apache、Squid等反向代理服务器的情况下,直接使用`request.getRemoteAddr()`获取到的往往是代理服务器自身的IP地址,而不是客户端的真实IP地址。 #### 获取客户端真实IP的基本原理 在不使用反向...

    F5XForwardedFor

    在互联网服务环境中,特别是大型企业或组织的服务器架构中,可能会使用到多个层次的反向代理服务器,如Squid和Apache,来提高性能、缓存内容以及提供额外的安全层。这些反向代理服务器在转发用户请求到后端服务器...

    Pro-Part5-A-构建CDN分发网络架构1

    方案的核心是利用Squid反向代理和DNS智能解析。Squid作为缓存代理服务器,可以存储经常访问的内容,减少对源服务器的请求。DNS智能解析则可以根据用户IP地址,将请求指向最近的CDN节点,确保低延迟和高可用性。整个...

Global site tag (gtag.js) - Google Analytics