昨天j.L问我http cache怎么设置,当时脑子有点糊涂,一时没想到其实他问的就是反向代理如何设置。

首发:PHP CUP xiaobao

什么是反向代理?

向代理就是代理服务器(如ISA、Squid)的一种特殊功能,这个功能可以加快客户访问您WEB服务器的速度。是否有正向代理?是的,正向代理它也可加
快用户访问WEB服务器的速度。两者有何区别?这样理解,使用代理服务器的正向代理功能,代理的是您内网用户访问因特网上的任何WEB服务器,而使用代理
服务器的反向代理功能,则是代理来自因特网上的任何客户访问您内网的WEB服务器。

快马加鞭的原理是什么?
可能您的身边围满了跑
保险、银行卡、化妆品推销的人,这些人就是企业的代理人,您无需跑到银行就可以办理银行卡,因为银行代理人缓存了银行需要您填写的一些单据,其实这就是正
向代理的过程。反过来,其实您也在卖自己的手编毛衣,那么上述那些人同样可以作为您的代理人,当有公众需要时,无须直接和您联系,因为代理事先缓存了您要
卖的毛衣,这个业务对于代理人来说就是反向代理过程。那么反向代理是如何加速您卖毛衣服务的呢?

图中,三个反向代理服务
器就是刚才提到的跑保险、银行卡、化妆品推销人,防火墙内部的服务器就是您。您事先把编织好的毛衣分发给这3个人,这样,他们就分担了您一个人繁忙的卖毛
衣服务。反映到现实,我们可以使用多个代理服务器来处理对一个高用量内容服务器的请求,这样做的好处是内容服务器可以处理更高的负载,并且比其独自工作时
更有效率。在初始启动期间,代理服务器首次从内容服务器检索文档,此后,大部分来自客户的请求直接在缓存服务器被返回了,从而减轻了对内容服务器的请求
数。

特别注意:新请求和CGI请求必须一路直达内容服务器,其余的请求可以由代理服务器直接进行处理。显而易见,一个新请求必须先到达内
容服务器,否则缓存哪来的内容呢?一个CGI请求就是对动态变化页面的请求,比如您正在看的这篇文章页就随时可能因用会的回帖而改变,反向代理一般不缓存
这种请求的内容页。

如何配置反向代理?
一般提供缓存功能的代理服务器软件都可以配置反向代理功能,比如微软的ISA,或者Linux下的Squid,本文仅以Squid为例,两者原理一样。

使用squid配置反向代理,主要就是squid.conf配置文件。如果使用系统自带的Squid软件包,配置文件在/etc/squid/目录下。

1、单台Squid反向代理服务器<==>单个WEB服务器

vi /etc/squid/squid.conf

http_port 80
httpd_accel_host 172.10.1.1
httpd_accel_port 80
httpd_accel_single_host on
httpd_accel_with_proxy on

指令作用:

http_port,指定Squid监听HTTP请求的端口,一般设置为80端口,这样使用户感觉不到反向代理的存在,就像访问真正的WEB服务器一样。比如用户不需要在浏览器里敲入http://www.phpcup.cn:8080,像以前一样直接输入http://www.phpcup.cn便可以了。

httpd_accel_host,指定WEB服务器的监听端口。

httpd_accel_host,指定WEB服务器的IP地址。

httpd_accel_single_host,
指令httpd_accel_single_host为on时,Squid被设置为仅对单一的web服务器作反向代理。就是说,一个反向代理服务器不仅可
以为单台WEB原内容服务器提供服务,也可同时为多台服务。当Squid为多台WEB服务器提供反向代理时,此命令设置为off。

httpd_accel_with_proxy,若希望Squid既作反向代理服务器又作本地机器的上网的正向代理服务器,则需将此命令设置为on。

2、多台Squid反向代理服务器<==>单个WEB服务器
Squid反向代理的配置如(1)所述一样,现在您需要做的是把目光转向DNS服务器的配置。我们知道,用户在浏览器中输入的是主机名,而非IP地址,但计算机网络设备必须知道IP地址才可以通信,这就需要一台DNS服务器实现主机名到IP地址的转换,更详细的工作原理可访问PHP CUP。

现在我们要做的是在DNS服务器上实现对多台Squid反向代理服务器的轮询。所谓轮询,就是当第一个用户请求phpcup.cn的IP地址时,返回的是123.123.123.1,下一个则返回123.123.123.2,再下一个来自用户的请求返回的是123.123.123.3,这样,3台Squid服务器的公网IP被DNS服务器轮番展示给用户。无论使用何种DNS服务器软件来配,其数据库都是这样的:
www.phpcup.cn.    IN  A  123.123.123.1
www.phpcup.cn.    IN  A  123.123.123.2
www.phpcup.cn.    IN  A  123.123.123.3
可见,一个主机名的A资源记录对应了多台Squid反向代理服务器的地址,实现了轮询效果。

特别注意:对于DNS服务器,您可以通过设置轮询的方式,来解决压力不均问题。以BIND 9.X为例,修改其配置文件named.conf

options {
    rrset-order { order cyclic; };
};

rrset-order命令有三个可选参数:random、fixed、cyclic 
random,随机返回A记录的IP地址
fix,将多个A记录按配置文件的顺序固定给出
cyclic,循环返回A记录的IP地址

我们需要的正是cyclic,round-robin(轮询)方式, 以1->2->3->1->2…这样的方式应答用户的请求。

重新启动BIND服务 /etc/init.d/named reload

使用dig www.phpcup.cn 跟踪DNS服务器的轮询配置是否生效。

反向代理-- WEB服务的加速器[转]的更多相关文章

  1. nignx反向代理web服务器的配置与使用

    一.为什么要用nignx反向代理 1.负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均 ...

  2. 利用Nginx实现反向代理web服务器

    一.Nginx简介 Nginx是一个很强大的高性能Web服务器和反向代理服务器,它具有很多非常优越的特性: 可以高并发连接 内存消耗少 成本低廉 配置文件非常简单 支持Rewrite重写 内置的健康检 ...

  3. nginx 反向代理 apache 服务

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时 ...

  4. Nginx基础 - 配置代理web服务

    1.反向代理及负载均衡Nginx实现负载均衡用到了proxy_pass代理模块核心配置,将客户端请求代理转发至一组upstream虚拟服务池. 1)upstream配置语法 Syntax: upstr ...

  5. 【Linux】【Services】【SaaS】Docker+kubernetes(10. 利用反向代理实现服务高可用)

    1. 简介 1.1. 由于K8S并没有自己的集群,所以需要借助其他软件来实现,公司的生产环境使用的是Nginx,想要支持TCP转发要额外安装模块,测试环境中我就使用HAPROXY了 1.2. 由于是做 ...

  6. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  7. 循序渐进nginx(二):反向代理、负载均衡、缓存服务、静态资源访问

    目录 反向代理 使用 1.创建代理目标服务端: 2.配置nginx反向代理目标服务端: 3.测试使用: 负载均衡 使用 1.准备服务端 2.修改nginx配置 3.测试 负载均衡策略 负载均衡的额外参 ...

  8. webRTC脱坑笔记(四)— windows下Nginx对Node服务的反向代理

    Nginx反向代理 1.什么是反向代理 当我们有一个服务器集群,并且服务器集群中的每台服务器的内容一样的时候,同样我们要直接从个人电脑访问到服务器集群服务器的时候无法访问,必须通过第三方服务器才能访问 ...

  9. 如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理

    导读 Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名.它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器.在这篇文章,我将讨论在安装了 ...

随机推荐

  1. NET动态调用WebService

    NET动态调用WebService 这不是一篇教你了解WebService的博文,也不是对WebService的深入理解, 这是一篇教你在开发过程中,如果动态的调用WebService一个方法. 在比 ...

  2. EF中的EntityState几个状态的说明

    之前使用EF,我们都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加.修改还是删除呢?答案是通过EntityState枚举来判断的,我们看一 ...

  3. 经典算法题每日演练——第十七题 Dijkstra算法

    原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...

  4. VTune使用amplxe-cl进行Hardware Event-based Sampling Analysis 0分析

    于BASH正在使用VTune进行Hardware Event-based Sampling Analysis 0分析: 结果(部分)例如以下: 版权声明:本文博客原创文章.博客,未经同意,不得转载.

  5. hdu 4864 Task(贪婪啊)

    主题链接:pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS ...

  6. MySQL编程(0) - Mysql中文乱码问题解决方案

    MySQL 5.6 for Windows 解压缩版配置安装: http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html MySQL ...

  7. DbModel

    DbModel 前言 我们都知道EF可以生成Dbmodel,系统生成的Model有时候并不是我们想要的,如何我们要生成自己的Model,那么久需要我们手动的去修改T4模版,T4是对“Text Temp ...

  8. Lua的多任务机制——协程(coroutine)

    并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定 ...

  9. XAMPP on Mac 组态 Virual Host

    首先,在hosts文件中添加virtual host域名.方向127.0.0.1 我一般使用的命名约定dev-domainname.com sudo nano /private/etc/hosts # ...

  10. MySQL安装指南

    近期领导突然说要用MySQL,我立刻当天晚上就研究了一下. http://www.mysql.com/这是官网,还好能够訪问.好多年前已经被oracle收购.分为企业版和社区版: MySQL Ente ...