我同意里克的观点。如果您希望从不同的网络服务器提供图像,请在不同的网络服务器上提供它们。例如:
<IMG src="images/Brett.jpg">
变成
<IMG src="http://brettnesbitt.akamia-technologies.com/images/Brett.jpg">
任何类型的负载均衡器仍会从 Web 服务器的管道中提供图像,这是您要避免的。
我当然知道你真正想要什么。您真正想要的是任何请求,例如:
GET images/Brett.jpg HTTP/1.1
自动转换为:
HTTP/1.1 307 Temporary Redirect
Location: http://brettnesbitt.akamia-technologies.com/images/Brett.jpg
这样您就不必做任何工作,除了将图像复制到其他网络服务器。
我真的不知道该怎么做。
通过使用短语“NAT”,它意味着防火墙/路由器接收 HTTP 请求,如果 HTTP 请求是针对图像文件的,您希望将请求转发到不同的内部服务器。
这就引出了一个问题,即您实际上要保存什么。无论哪个内部 Web 服务器为 HTTP 请求提供服务,数据仍然必须通过防火墙/路由器的管道。
我提出这个问题的原因是,当有人想要从不同的服务器提供图像时,常见的场景是因为他们想要从他们的实际逻辑中分离出高带宽、大部分是静态的、低 CPU 成本的内容。
仅使用 NAT 重写数据包并将其发送到不同的服务器将无法解决该常见问题。
另一个原因可能是因为图像不是系统上的静态内容,并且请求
GET images/Brett.jpg HTTP/1.1
实际上是动态构建映像,CPU 成本很高,或者仅使用 ServerB 可用的数据(即 SQL Server 数据库)。
如果是这种情况,那么我仍然会在图像请求上使用不同的服务器名称:
GET http://www.brettsoft.com/default.aspx HTTP/1.1
GET http://imageserver.brettsoft.com/images/Brett.jpg HTTP/1.1
我了解您的期望,通过网络数据包检查来覆盖 NAT 规则并将其发送到另一台服务器 - 我从未见过任何可以做到这一点的事情。
这听起来更像是“代理式”,网络代理就是这样做的。(即 pfSense 和 m0n0wall 做不到)
这导致了我们曾经使用过的一种解决方案:一个自定义的 Web 服务器,它分析请求,从某个内部服务器发出适当的请求,然后二进制将响应写入客户端。
一位“安全顾问”坚持认为解决方案中的痛苦,显然他相信通过默默无闻来确保安全。
我知道 IIS 不能为您自己做这些事情——我不知道其他网络服务器产品。
我只是四处询问,显然如果您想为基于 linux 的路由器编写一个自定义内核模块,您可以让它检查数据包并采取适当的措施。这样的模块可能存在。显然,还有许多其他开源模块可以用作起点。
但我宁愿朝自己的脑袋开枪。