我有几个使用 LVS 进行负载平衡的后端 Web 服务器。这些机器上只有内部不可路由的 IP。负载平衡器是唯一具有外部 IP 的机器。此设置效果很好。我想添加另一个 Web 服务器用于图像服务,但它不会成为负载平衡池的一部分。是否可以从负载平衡的 Web 服务器代理传递到图像服务器并将响应重定向到客户端?
客户端-->外部LB-->内部Web服务器-->内部图片服务器
当我从等式中删除 LB 时,代理传递就可以工作了,但是尝试使用它时却没有运气。
答案1
除了 LVS,您还可以尝试 HAproxy。在 http 模式下,它可以识别处理域名的“Host”等标头。这样,您就可以将静态文件直接代理到“内部图像服务器”
另一种方法是请求另一个外部 IP 并运行具有不同配置的两个 LVS 副本 - 一个用于动态,一个用于静态文件,它们绑定在不同的外部 IP 上。
答案2
我会为托管图片的服务器获取一个新的外部 IP,并将链接绑定到其中的图片http://img.你的域名.com/所以我不会让现有的架构复杂化。否则,我看到他们有 KTCPVS:http://kb.linuxvirtualserver.org/wiki/KTCPVS_HTTP它应该支持 url 模式路由。
答案3
你这样做的目的是什么?Nginx 已经非常擅长提供静态媒体,并且非常擅长缓存所述媒体。通过原始 Web 服务器将其代理连接到静态内容服务器似乎是多余的(不好的那种),并且会增加网络开销,因为流量必须通过 nginx 服务器返回才能传送。
既然流量无论如何都是通过 LVS 盒(en)传输的,为什么不让其直接将流量引导到图像服务器,如上面的海报所说,通过不同的域名引用。
如果您确实不想要额外的域名引用(您应该考虑它,它可以从用户端加快您的网站速度),让 LVS 将 /images 的流量直接发送到图像服务器,它具有第 7 层路由功能。
底线是,如果您试图减轻 Web 服务器的负载,您实际上应该从 Web 服务器中移除负载。代理可能会为您节省这些机器上的磁盘空间,但除此之外没有太多好处,因为它们仍然必须处理请求并传递流量。