【问题标题】:How to set up an Apache 2 reverse proxy with dynamic backend servers? [closed]如何使用动态后端服务器设置 Apache 2 反向代理? [关闭]
【发布时间】:2009-10-29 06:25:16
【问题描述】:

我想将 Apache 2 设置为反向代理,使用基于名称的虚拟主机来决定如何将请求路由到后端服务器。很简单。

问题是这些后端服务器可以以动态方式添加和删除。我的第一个想法是以编程方式重写 Apache 配置文件,并在每次后端服务器启动或关闭时调用 apachectl graceful。这似乎不是正确的解决方案。有什么更好的方法来实现这一点?

我需要能够优雅地将名称处理转移到不同的后端服务器。例如,Backend-Server-A 可能正在处理 example.com 的请求。监控进程可能会确定 Backend-Server-A 已过时(内存使用量过多、有新版本的服务器代码来处理 example.com 等)。监控进程启动 Backend-Server-B,它将很快处理 example.com 的请求。 Apache 应将 example.com 的任何新请求定向到 Backend-Server-B,但允许 Backend-Server-A 当前正在处理的任何待处理请求在 Backend-Server-A 关闭之前完成。

更新Posted to Server Fault

【问题讨论】:

  • 您应该在 serverfault 上重新发布此内容
  • 交叉发帖有刺激他人的风险吗?
  • 在其他情况下,可能,但这确实是serverfault的问题,所以我只是把它作为一个新问题放在那里(不要只是发布链接)
  • 因在 SF 上重新发布而关闭。如果您认为这确实在 SO 上有生命,请标记它,我会看看。

标签: apache2 reverse-proxy


【解决方案1】:

唯一想到的是使用 RewriteMap 脚本,该脚本将通过 P 标志到 RewriteRule 来决定去哪台机器,类似于

#!/usr/bin/perl
#This is /usr/bin/requestdistributor.pl
$| = 1; # Turn off buffering
while (<STDIN>) {
        print distributeRequest($_);
}
sub distributeRequest {
    my $request = shift;
    #do whatever you have to do to find the proper machine for the request,
    #return the complete URL with a trailing newline
}

然后在Apache配置文件中

RewriteMap distributeRequests prg:/usr/bin/requestdistributor.pl 
RewriteRule (.*) ${distributeRequests:$1} [P]

#Setup the reverse proxying for all machines, use the proper URLs
ProxyPassReverse / http://machine1
ProxyPassReverse / http://machine2
#and so on...
ProxyPassReverse / http://machineN

警告:这可能有一些缺陷,因为它未经测试,当你添加一个新的服务器时,你必须添加一个新的 ProxyPassReverse(并且做一个优雅的),现在我考虑一下,这取决于具体的您甚至可能不需要 ProxyPassReverse 行的应用程序。所以,测试一下,请告诉我们它是否有效(或无效)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2017-11-06
    • 2020-07-12
    • 2011-02-22
    • 1970-01-01
    • 2021-11-27
    • 2013-04-02
    相关资源
    最近更新 更多