代理服务器和隧道

在互联网的不同网络之间导航时,代理服务器和 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";
}

另见