我一直使用 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 将使用平衡器。