反向代理到内部服务器映射

反向代理到内部服务器映射

我想设置 5 个 Web 服务器的反向代理。反向代理接收的所有请求在 http 请求查询字符串中都会有一个唯一的 ID (UID)。我有一个包含 UID -> Web 服务器映射的数据库。

我不确定这是否合理可行。我希望反向代理执行以下操作:1. 请求进入 2. 检查缓存中的 UID,如果未找到,则从数据库加载 3. 将请求转发到适当的 Web 服务器

仅供参考-我无法将服务器 ID 编码到 UID 中,因为映射可能会改变但 uid 不会改变。

使用 perlbal 或其他工具可以实现这样的效果吗?我并不介意是否需要编写一些脚本来实现这一点。我只是不确定我的选择是什么,或者其他人是如何解决这个问题的。

非常感谢您的意见!

答案1

您正在寻找的是负载平衡器。您可以从 Citrix 和 Foundry 等公司购买硬件负载平衡器(我们都有),也可以配置 Apache 服务器来实现这一点。

如果您的后端服务器是 tomcat,我会研究 mod_ajp,我已经为其完成了代理类型配置。

有关常规 HTTP 代理负载均衡器的配置详细信息,您可以在此处获取更多信息:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

您很可能可以找到一些适用于特定操作系统和/或产品的优秀教程。至于会话逻辑,您可能必须在应用程序中处理它,将会话存储在中央数据库中,但听起来您已经走上了这条路。

答案2

根据您使用的平台,可以做到这一点,但有一个很大的问题。

对于 IIS,您可以使用 ISAPI_Rewrite,对于 Apache,您可以使用 mod_rewrite。两者都可以满足您的要求,但是,据我所知,不能动态检索它们的映射。它们从文本文件中读取设置。

您可以做的(我就是这么做的)是创建一个小程序来与数据库交互,每次更改记录时,重写器的文本文件都会重新编译。当下一个请求通过时,重写引擎会加载最新版本,一切就都好了。

更新记录时一般会有大约 0.5 秒的延迟。虽然不是即时的,但对于网络工作来说通常已经足够了。

答案3

这只是一种理论,但应该可行。您可以让 apaches mod_rewrite RewriteMap 使用简单的应用程序进行重写。根据 UID 将每个请求重写为类似 server1.example.com 的内容,然后将该 URL 用于 mod_proxy。

Apache 作为反向代理使用起来有点重,也许您可​​以使用 Varnish 或 nginx 做同样的事情?

相关内容