代理服务器和隧道
在浏览互联网的不同网络时,代理服务器和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";
}
有关更多示例,请参阅代理自动配置 (PAC)。