反向代理的代理服务器
如果您的内容服务器具有必须保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器作为内容服务器的替身。当外部客户机尝试访问内容服务器时,会将其送到代理服务器。实际内容位于内容服务器上,在防火墙内部受到安全保护。代理服务器位于防火墙外部,在外部客户机看来就像是内容服务器。
当客户机向站点提出请求时,请求将转到代理服务器。然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器。内容服务器再通过该通道将结果回传给代理服务器。代理服务器将检索到的信息发送给客户机,好像代理服务器就是实际的内容服务器(参见图 14-1)。如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。 这样,代理服务器就在安全数据库和可能的恶意攻击之间提供了又一道屏障。与有权访问整个数据库的情况相对比,就算是侥幸攻击成功,作恶者充其量也仅限于访问单个事务中所涉及的信息。未经授权的用户无法访问到真正的内容服务器,因为防火墙通路只允许代理服务器有权进行访问。
图 14-1 反向代理服务器就像是真正的内容服务器
可以配置防火墙路由器,使其只允许特定端口上的特定服务器(在本例中为其所分配端口上的代理服务器)有权通过防火墙进行访问,而不允许其他任何机器进出。
安全反向代理 当代理服务器与其他机器之间有一个或多个连接使用安全套接字层(SSL) 协议加密数据时,即会进行安全反向代理。
反向代理是指服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在。
两者区别:
1、用途差异
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率;
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
2、安全差异
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此必须采取安全措施以确保仅为经过授权的客户端提供服务;反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
扩展资料:
反向代理工作方式:
1、通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
2、由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。
3、当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。
4、不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
-反向代理
1、是软件的网络模块编写存在缺陷,当发送外向网络请求时,请求格式不符合服务器端规范,导致请求发生失败。
2、软件发送的网络请求本身格式正确,但是软件部署在企业内网,发送的网络请求没有穿越过反向服务器,从而导致网络请求失败。
两者区别
两者的相同点在于都是用户和服务器之间的中介,完成用户请求和结果的转发。主要的不同在于:
(1)转发代理的内部是客户端,而反向代理的内部是服务器。即内网的客户端通过转发代理服务器访问外部网络,而外部的用户通过反向代理访问内部的服务器。
(2)转发代理通常接受客户端发送的任何请求,而反向代理通常只接受到指定服务器的请求。如校园网内部用户可以通过转发代理访问国外的任何站点(如果不加限制的话),而只有特定的请求才发往反向代理,然后又反向代理发往内部服务器。
怎么编写网站的HTTP反向代理服务器在Nodejs上实现一个简单的HTTP代理程序还是非常简单的,本文章的例子的核心代码只有60多行,只要理解内置http模块的基本用法即可,具体请看下文。
接口设计与相关技术
使用httpcreateServer()创建的HTTP服务器,处理请求的函数格式一般为function(req,res){}(下文简称为requestHandler),其接收两个参数,分别为httpIncomingMessage和httpServerResponse对象,我们可以通过这两个对象来取得请求的所有信息并对它进行响应。
主流的NodejsWeb框架的中间件(比如connect)一般都有两种形式:
中间件不需要任何初始化参数,则其导出结果为一个requestHandler
中间件需要初始化参数,则其导出结果为中间件的初始化函数,执行该初始化函数时,传入一个options对象,执行后返回一个requestHandler
为了使代码更规范,在本文例子中,我们将反向代理程序设计成一个中间件的格式,并使用以上第二种接口形式:
//生成中间件
consthandler=reverseProxy({
//初始化参数,用于设置目标服务器列表
servers:["127001:3001","127001:3002","127001:3003"]
});
//可以直接在http模块中使用
constserver=httpcreateServer(handler);
//作为中间件在connect模块中使用
appuse(handler);
说明:
上面的代码中,reverseProxy是反向代理服务器中间件的初始化函数,它接受一个对象参数,servers是后端服务器地址列表,每个地址为IP地址:端口这样的格式
执行reverseProxy()后返回一个function(req,res){}这样的函数,用于处理HTTP请求,可作为httpcreateServer()和connect中间件的appuse()的处理函数
当接收到客户端请求时,按顺序循环从servers数组中取出一个服务器地址,将请求代理到这个地址的服务器上
服务器在接收到HTTP请求后,首先需要发起一个新的HTTP请求到要代理的目标服务器,可以使用httprequest()来发送请求:
constreq=httprequest(
{
hostname:"目标服务器地址",
port:"80",
path:"请求路径",
headers:{
"x-y-z":"请求头"
}
},
function(res){
//res为响应对象
consolelog(resstatusCode);
}
);
//如果有请求体需要发送,使用write()和end()
reqend();
要将客户端的请求体(Body部分,在POST、PUT这些请求时会有请求体)转发到另一个服务器上,可以使用Stream对象的pipe()方法,比如:
//req和res为客户端的请求和响应对象
//req2和res2为服务器发起的代理请求和响应对象
//将req收到的数据转发到req2
reqpipe(req2);
//将res2收到的数据转发到res
res2pipe(res);
说明:
req对象是一个ReadableStream(可读流),通过data事件来接收数据,当收到end事件时表示数据接收完毕
res对象是一个WritableStream(可写流),通过write()方法来输出数据,end()方法来结束输出。
以上就是小编对于怎么编写网站的HTTP反向代理服务器的解答。
服务器网站代理服务器写网站
0条评论