Apache 负载平衡代理绕过不起作用

Apache 负载平衡代理绕过不起作用

我一直使用 apache 作为 puma 应用服务器 (RoR) 的反向代理。资产都位于名为 assets 的子目录中,我在 apache 配置中添加了一行,如下所示:

<Location /assets>
  ProxyPass !
</Location>

一切运行正常,静态内容由 apache 提供,其他内容都由 puma 代理。但是我想实现负载平衡,因此我在配置中添加了以下几行:

<Proxy balancer://mycluster>
  BalancerMember http://localhost:9292
  BalancerMember http://192.168.1.2:9292
</Proxy>

并将代理传递和代理传递反向指令设置为此

ProxyPass / balancer://mycluster lbmethod=byrequests
ProxyPassReverse / balancer://mycluster

现在,assets 目录不起作用,当浏览器尝试获取目录中的任何文件时,我收到 500 错误。在服务器错误日志中,弹出以下行:

 [Wed Aug 28 15:31:52 2013] [warn] proxy: No protocol handler was valid for 
 the URL /assets/application-c713b532d29cd16b1e8d99df39489e72.css. If you 
 are using a DSO version of mod_proxy, make sure the proxy submodules are 
 included in the configuration using LoadModule.

有人能告诉我为什么我的配置不再起作用吗?完整配置是这里

- 编辑 -

实际上唯一可行的路径是根路径,之前代理到 puma 服务器的其他请求都不起作用。

答案1

我将使用该ProxyPassMatch指令来更好地控制:

ProxyPassMatch ^/assets/.*$ !
ProxyPassMatch ^/(.*)$ balancer://mycluster/$1 lbmethod=byrequests
ProxyPassReverse / balancer://mycluster

<Proxy balancer://mycluster>
  BalancerMember http://localhost:9292
  BalancerMember http://192.168.1.2:9292
</Proxy>

因为指令是按照它们出现的顺序进行评估的,所以您的assets目录不应该被代理,而其余的 URL 将使用平衡器。

相关内容