我正在尝试使用 Apache 2.4 设置负载平衡器,但无法使其工作。
这是我在http配置文件文件:
<Proxy balancer://pop>
BalancerMember http://pop1.local/ loadfactor=1
BalancerMember http://pop2.local/ loadfactor=1
ProxySet lbmethod=byrequests
</Proxy>
这是已加载的 Apache 模块列表:
核心 mod_so http_core 事件 mod_authn_file mod_authn_core mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_core mod_access_compat mod_auth_basic mod_watchdog mod_reqtimeout mod_filter mod_mime mod_log_config mod_env mod_headers mod_setenvif mod_version mod_proxy mod_proxy_connect mod_proxy_ftp mod_proxy_http mod_proxy_fcgi mod_proxy_scgi mod_proxy_wstunnel mod_proxy_ajp mod_proxy_balancer mod_proxy_express mod_slotmem_shm mod_lbmethod_byrequests mod_lbmethod_bytraffic mod_lbmethod_bybusyness mod_lbmethod_heartbeat mod_unixd mod_heartmonitor mod_status mod_autoindex mod_dir mod_alias mod_rewrite mod_php5
为了测试,我设置了三个虚拟机,一个用于负载均衡器,两个用于后端 Web 服务器。使用主办方文件中我在所有机器中引入了三个域:
192.168.0.100 pop.local
192.168.0.101 pop1.local
192.168.0.102 pop2.local
pop.local
是我的负载均衡器,另外两个是后端。info.php
在每个后端上创建一个文件后,我可以通过输入http://pop1.local/info.php
和来加载它们http://pop2.local
。但是当我输入 时http://pop.local
,404 File not found
会返回错误。
Apache 可以pop.local
正常加载,就像没有Proxy balancer
设置一样。它甚至可以毫无问题地提供其自己的本地文件。
有什么问题?我遗漏了什么吗?
[更新]
这是我的日志文件的内容:
错误日志:
[Wed Oct 02 02:40:55.530051 2013] [lbmethod_heartbeat:notice] [pid 2179:tid 140142625933120] AH02282: No slotmem from mod_heartmonitor
[Wed Oct 02 02:40:55.541737 2013] [mpm_event:notice] [pid 2179:tid 140142625933120] AH00489: Apache/2.4.6 (Unix) PHP/5.5.1 configured -- resuming normal operations
[Wed Oct 02 02:40:55.541768 2013] [core:notice] [pid 2179:tid 140142625933120] AH00094: Command line: '/usr/local/apache2/bin/httpd'
[Wed Oct 02 02:42:04.170782 2013] [:error] [pid 2615:tid 140142199158528] [client 192.168.0.81:55732] script '/usr/local/apache2/htdocs/info.php' not found or unable to stat
答案1
这是一个可以正常工作的完整平衡器配置:
<Proxy balancer://pop>
BalancerMember http://pop1.local/ loadfactor=1
BalancerMember http://pop2.local/ loadfactor=1
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://pop/
正如所述文档,如果 的第一部分以ProxyPass
结尾,则/
第二部分也需要以 结尾/
:
如果第一个参数以尾随 / 结尾,则第二个参数也应以尾随 / 结尾,反之亦然。否则,对后端的请求可能会遗漏一些必要的斜杠,并且无法提供预期的结果。
您还需要确保将其ProxyRequests
设置为off
。