代理服务器和隧道
在互联网的不同网络之间导航时,代理服务器和 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 服务器设置为只能解析内部主机名的环境中工作,目标是仅对无法解析的主机使用代理
function FindProxyForURL(url, host) {
if (isResolvable(host)) {
return "DIRECT";
}
return "PROXY proxy.mydomain.com:8080";
}