代理服务器和隧道

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

代理服务器主要分为两种类型:**正向代理**(或隧道、网关)和**反向代理**(用于控制和保护对服务器的访问,例如负载均衡、身份验证、解密或缓存)。

正向代理

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

正向代理也可以是匿名的,并允许用户在浏览网页或使用其他互联网服务时隐藏其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代理后面如何使用TLS(即HTTPS,端口443)访问网站的方式。但是请注意,并非所有代理服务器都支持CONNECT方法,或者仅将其限制为端口443。

另请参阅维基百科上的HTTP隧道文章

代理自动配置 (PAC)

一个代理自动配置 (PAC)文件是一个JavaScript函数,用于确定Web浏览器请求(HTTP、HTTPS和FTP)是直接转到目标还是转发到Web代理服务器。PAC文件中包含的JavaScript函数定义了该函数

自动配置文件应保存到以.pac文件扩展名命名的文件:proxy.pac

并将MIME类型设置为application/x-ns-proxy-autoconfig

该文件包含一个名为FindProxyForURL的函数。以下示例将在内部DNS服务器已设置好,以便它只能解析内部主机名,并且目标是仅对无法解析的主机使用代理的环境中工作

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

有关更多示例,请参阅代理自动配置 (PAC)

另请参阅