代理服务器在客户端的请求中注入 X-Forwarded-For http 标头。如果 XFF 正在执行其工作以将每个服务器的响应转发给客户端,那么就需要分配内部 IP 并创建 NAT 表。他们是否必须分配内部 IP 才能工作?
答案1
HTTP 代理在应用层工作。NAT 在 IP 层工作。这是两个完全不同的东西,彼此不了解,也不在同一层运行。因此你的问题毫无意义。
当 HTTP 代理收到网页请求时(假设网页尚未在代理的缓存中),它将打开自己的 TCP 连接以连接到目标 HTTP 服务器,发出自己的 HTTP 请求,解析 HTTP 响应,然后将响应转发给客户端,客户端与代理之间有自己的 TCP 连接。HTTP 代理仅理解 HTTP 协议,不会代理任何其他协议(请注意,为了简单起见,我将更令人困惑的内容(如CONNECT
或多用途代理)放在一边)。
NAT 则完全不同。通过 NAT 转发 HTTP 连接时,客户端和服务器之间只有一个直接 TCP 连接,NAT 仅负责跟踪哪个内部端点(地址和端口)正在与哪个外部端点(地址和端口)通信。NAT 不会打开 TCP 连接,它不知道 HTTP 是什么,它不会解析请求或响应,当然也不会缓存任何内容。NAT 可以转发任何协议(HTTP、ICMP、DNS……),只要它基于 IP,因为它不需要了解有关协议的任何信息即可运行。
请注意,我在这里仅描述简单的配置。还有更复杂的设置,乍一看可能会令人困惑。一种这样的配置是透明代理(也称为拦截代理),它位于网络路径的中间,并主动拦截客户端尝试与外部建立的 HTTP 连接。当尝试建立此类连接时,透明代理会重写目标地址,以便将连接重定向到代理。此后,一切都像我上面描述的一样。此设置用于强制客户端通过代理,而无需更改其配置。在这种情况下,客户端甚至可能不知道他们的 HTTP 流量正在被代理,而不是简单地进行 NAT。有关拦截代理的更多实用信息,乌贼文档有一个大量信息对这个。