`

squid实现反向代理的原理

阅读更多

原文 http://www.opendigest.org/article.php/10

 

背景介绍

 

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

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

 

一.       反向代理的概念

 

什么是反向代理呢?其实,反向代理也就是通常所说的WEB 服务器加速,它是一种通过在繁忙的WEB 服务器和Internet 之间增加一个高速的WEB 缓冲服务器(即:WEB 反向代理服务器)来降低实际的WEB 服务器的负载。典型的结构如下图所示:

 

 

Web 服务器加速(反向代理)是针对Web 服务器提供加速功能的。它作为代理Cache ,但并不针对浏览器用户,而针对一台或多台特定Web 服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache 设备放置在一台或多台Web 服务器前端即可。当互联网用户访问某个WEB 服务器时,通过DNS 服务器解析后的IP 地址是Reverse Proxy ServerIP 地址, 而非原始Web 服务器的IP 地址, 这时Reverse Proxy Server 设备充当Web 服务器,浏览器可以与它连接,无需再直接与Web 服务器相连。因此,大量Web 服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和web 服务器直接通信带来的安全隐患,而且能够很大程度上减轻web 服务器的负担,提高访问速度。

 

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

 

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

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

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

2.  透明代理缓冲服务器

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

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 系统上使用者最多功能也最完整的一套软体。ApacheNetscape 虽附有相关的Proxy 模块,但因其功能简单而不够普及。有关squid 的详细说明可到squid 网站(http://www.squid-cache.org) 查询。

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

 

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

    通过squid 配置反向代理主要就是配置“squid.conf ”这个配置文件。下面以Linux 操作系统为例进行介绍,其它版本的在UNIX 也同样适用。在Linuxsquid 如果是以源代码方式安装的话,这个文件一般在“/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 服务器。

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反向代理服务器也可以实现身份验证和访问控制,提高 WEB 服务器的安全性。 反向代理服务器是提高WEB服务器性能和安全性的解决方案。它可以降低WEB服务器的负载,提高访问速度,并且可以防止外部网主机直接和...

    Squid代理服务器原理

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

    squid代理服务软件

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

    squid2.6 windows

    下面将详细介绍在Windows上安装和配置Squid 2.6的步骤,以及反向代理服务的工作原理。 首先,下载适用于Windows的Squid 2.6安装包。这个压缩包可能包含了名为"Squid"和" squid"的文件,它们通常分别是Squid的安装...

    Linux下squid服务器的配置与管理.pdf

    实验内容包括四个部分:Squid正向代理服务器的配置与测试、Squid透明代理服务器的配置与测试、Squid反向代理服务器的配置与测试,以及Squid最新版本的下载与安装。 四、实验步骤和调试过程 实验步骤和调试过程包括...

    基于linux的Squid代理服务器的架设.doc

    Squid支持三种模式:普通代理、透明代理和反向代理。普通代理缓存静态网页;透明代理无需客户端配置,方便使用;反向代理用于WEB服务器加速,降低服务器负载。 2.1 代理服务器工作原理 当客户端发起互联网访问请求...

    Squid权威指南.rar

    反向代理模式下,Squid作为服务器的前端,接收所有客户端请求并转发到正确的服务器,这样可以隐藏后端服务器的信息,增加安全性。 在性能优化上,Squid提供了许多性能调优选项,包括缓存策略、内存分配、I/O调度等...

    linux下squid服务器的配置与管理归纳.pdf

    Squid 服务器是 Linux 下的一种流行的代理服务器软件,它可以实现正向代理、透明代理和反向代理等多种代理模式。本文将总结 Squid 服务器的配置与管理,在实验中,我们将使用 VMware 和 Red Hat Enterprise Linux ...

    squid中文文档,写得很详细

    3. **缓存机制**:Squid的缓存策略包括正向代理和反向代理,文档会解释两者的区别和应用场景。还会涉及缓存命中率、缓存更新策略(如LRU、FIFO)以及缓存过期和刷新机制。 4. **访问控制**:文档会介绍如何通过`...

    squid教程 ppt版

    3. **反向代理**:Squid可以作为反向代理服务器,隐藏真实服务器的身份,分发客户端请求到后端多个服务器,提高网站的负载均衡和可用性。 【Squid如何工作】 Squid的工作流程主要包括以下几个步骤: 1. 用户在...

    Squid 权威指南

    2. **反向代理**:Squid 可以作为 Web 服务器的代理,接收客户端请求并转发到后端服务器,可以实现负载均衡和内容缓存,提高网站性能。 3. **访问控制**:通过 ACL(Access Control List),Squid 可以限制特定 IP ...

    LVS+Keepalived+Squid+Nginx

    在构建高性能、高可用性的Web服务架构中,`LVS(负载均衡服务器)`、`Keepalived`、`Squid`(代理缓存服务器)和`Nginx`(反向代理服务器)是四个非常关键的组件。下面将详细介绍这四个技术及其相互配合的工作原理。 1. *...

    squid 3.5.1源代码

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

    Squid中文权威指南.pdf

    - **Squid的简明历史**:Squid是一个开源的Web代理缓存服务器,由Duane Wessels编写并广泛应用于网络中。 - **硬件和操作系统要求**:Squid可在各种硬件和操作系统上运行,包括Windows和Linux服务器。 - **Squid的...

    windows 版本 squid

    6. **安全特性**:Squid 支持 SSL 加密,可以提供安全的 HTTPS 代理服务,并有反向代理功能,可以隐藏后端服务器的细节,增强安全性。 **故障排查与维护** 在 Windows 上运行 Squid,可能遇到的问题包括服务无法...

    squid限速

    Squid 可以作为正向代理(客户端通过 Squid 访问互联网资源)或反向代理(客户端直接访问 Squid,由 Squid 转发请求到后端服务器)。本文将重点讨论如何在 Squid 中实现正反代理的限速功能。 #### 二、Squid 限速...

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

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

    CDN学习资料可以看看

    在CDN场景下,Squid通常被配置为反向代理服务器,它接收来自用户的请求,然后将这些请求转发到源服务器,同时将返回的数据缓存起来,以便后续相同请求可以直接从缓存中快速响应。 在" squid3.0反向代理的文档.doc ...

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

    在Linux环境下,Squid是一个广泛使用的开源HTTP代理服务器,它可以作为正向代理、透明代理或反向代理来实现各种网络服务。Squid服务器的配置与管理是网络系统管理员的一项重要技能,尤其是在教育环境中,它有助于...

Global site tag (gtag.js) - Google Analytics