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 的情况下设置当前的应用程序服务器?
您可以使用带有单个值的 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 文档中阅读所有相关信息,然后自己决定什么是最佳选择。