mod_proxy 更改无需重启

Fir*_*row 3 load-balancing mod-proxy apache-2.2

如何设置一个 apache mod-proxy 服务器来从一个单独的指定服务器提供内容,这样我就可以在不重新启动 apache 的情况下更改从哪个服务器提供内容?

内容服务器会定期更改,要么是为了维护,要么是因为故障。

我有一个不需要在集群中的应用程序,但我希望在主应用程序服务器崩溃时显示静态版本的网页。

我还想要更新服务器上的代码库的选项,测试它,然后切换旧的实时服务器。

我已经设置了 mod_proxy 使用

ProxyPass / http://appserver.com
ProxyPassReverse / http://appserver.com
Run Code Online (Sandbox Code Playgroud)

这有效,但接缝需要使用不同的设置重新启动以改变方向。这违背了在实时服务器上使用它的目的。

我也尝试过 mod_balencer,它非常适合故障转移,但需要重新启动 apache 才能在备份时将其设置回为主应用程序服务器提供服务。

     ProxyPass / balancer://hotcluster/
     <Proxy balancer://hotcluster>
            BalancerMember http://dyn:80 loadfactor=1
            BalancerMember http://basic:80 status=+H
            ProxySet lbmethod=bytraffic
     </Proxy>
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在不重新启动 apache 的情况下设置当前的应用程序服务器?

cod*_*ead 8

您可以使用带有单个值的 RewriteMap 使用 mod_rewrite:

RewriteMap server txt:/path/to/file/map.txt
RewriteRule ^/(.*) http://${server:production}/$1 [P,L]
Run Code Online (Sandbox Code Playgroud)

然后使用此内容创建 /path/to/file/map.txt

# To use a different server, change appserver.com 
# to e.g. maintenance.appserver.com

production appserver.com
Run Code Online (Sandbox Code Playgroud)

一旦 mod_rewrite 检测到您更改了此值,它就会自动将请求代理到新服务器。

您可以使用具有不同性能影响的多种 RewriteMap 类型之一:数据库文件、随机文本文件映射,甚至外部程序——简而言之,您可以使用它们执行各种神秘的魔法。在mod_rewrite 文档中阅读所有相关信息,然后自己决定什么是最佳选择。