代理服务器和隧道

当浏览因特网的不同网络时,代理服务器和HTTP隧道便于访问万维网上的内容。代理可以位于用户的本地计算机上,也可以位于用户计算机和Internet上的目标服务器之间的任何位置。本页概述了有关代理的一些基础知识,并介绍了一些配置选项。

有两种类型的代理:转发代理(或隧道或网关)和反向代理(用于控制和保护对服务器的访问以进行负载平衡,身份验证,解密或缓存)。

转发代理部分

转发代理或网关或仅“代理”向客户端或一组客户端提供代理服务。互联网上可能有数十万个开放代理。它们存储和转发Internet服务(如DNS或网页)以减少和控制组使用的带宽。

转发代理也可以是匿名代理,允许用户在浏览Web或使用其他Internet服务时隐藏其IP地址。TOR(洋葱路由器)通过多个代理路由互联网流量以匿名。

反向代理部分

顾名思义,反向代理与转发代理的作用相反:转发代理代表客户端(或请求主机),反向代理代表服务器行事。转发代理可以隐藏客户端的身份,而反向代理可以隐藏服务器的身份。反向代理有几个用例,其中一些是:

  • 负载平衡:将负载分配给多个Web服务器,
  • 缓存静态内容:通过缓存静态内容(如图片)来卸载Web服务器
  • 压缩:压缩和优化内容以加快加载时间。

通过代理部分转发客户信息

代理可以使请求看起来好像源自代理的IP地址。如果使用代理提供客户端匿名,这可能很有用,但在其他情况下,原始请求中的信息将丢失。原始客户端的IP地址通常用于调试,统计或生成与位置相关的内容。披露此信息的常用方法是使用以下HTTP标头:

标准化标题:

Forwarded
包含代理服务器面向客户端的信息,当代理涉及请求路径时,这些信息会被更改或丢失。

或者事实上的标准版本:

X-Forwarded-For 
标识通过HTTP代理或负载平衡器连接到Web服务器的客户端的原始IP地址。
X-Forwarded-Host 
标识客户端用于连接到代理或负载均衡器的请求的原始主机。
X-Forwarded-Proto 
标识客户端用于连接到代理或负载均衡器的协议(HTTP或HTTPS)。

要提供有关代理本身的信息(不是关于连接到它的客户端),Via可以使用标头。

Via
代理添加了正向和反向代理,并且可以出现在请求标头和响应标头中。

HTTP隧道部分

隧道通过封装数据通过公共网络传输专用网络数据和协议信息。HTTP隧道正在使用更高级别的协议(HTTP)来传输更低级别的协议(TCP)。

HTTP协议指定了一个名为的请求方法CONNECT。它启动与请求的资源的双向通信,并可用于打开隧道。这就是HTTP代理背后的客户端如何使用SSL访问网站(即HTTPS,端口443)。但请注意,并非所有代理服务器都支持该CONNECT方法或仅将其限制为端口443。

另请参阅Wikipedia上的HTTP隧道文章。

代理自动配置(PAC)部分

一个代理服务器自动配置(PAC)文件是一个JavaScript的函数,确定网络浏览器的请求(HTTP,HTTPS和FTP)是否直接去目的地或转发到Web代理服务器。PAC文件中包含的JavaScript函数定义了函数:

应将auto-config文件保存到.pac文件扩展名为的文件中:

proxy.pac文件

并且MIME类型设置为:

应用程序/ x-NS-代理自动配置

该文件由一个名为的函数组成  FindProxyForURL。下面的示例将在设置内部DNS服务器的环境中工作,以便它只能解析内部主机名,目标是仅对不可解析的主机使用代理:

function FindProxyForURL(url, host) {
  if (isResolvable(host))
    return "DIRECT";
  else
    return "PROXY proxy.mydomain.com:8080";
}