我正在尝试为我的apache服务器上的几个虚拟主机设置负载均衡器。 通过为文件添加以下行来添加这些虚拟主机" C:\ Windows \ System32 \ drivers \ etc \ hosts":
127.0.0.1 localhost
127.0.0.1 vhosta
127.0.0.1 vhostb
127.0.0.1 vhostc
127.0.0.1 load-balancer
::1 localhost
然后我为文件添加了以下行" C:\ xampp \ apache \ conf \ extra \ httpd-vhosts.conf":
<VirtualHost *:80>
DocumentRoot c:/xampp/htdocs
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot c:/vhosts/vhosta
ServerName vhosta
</VirtualHost>
<VirtualHost *:80>
DocumentRoot c:/vhosts/vhostb
ServerName vhostb
</VirtualHost>
<VirtualHost *:80>
DocumentRoot c:/vhosts/vhostc
ServerName vhostc
</VirtualHost>
<VirtualHost *:80>
DocumentRoot c:/vhosts/load-balancer
ServerName load-balancer
</VirtualHost>
当然我已经在C:/ vhosts /中创建了文件夹,并为每个文件夹添加了一个index.php文件(里面有一个echo语句)。
现在,我可以访问&#34; http://vhosta&#34;通过我的浏览器访问虚拟主机等
但我需要的是制作负载均衡器,选择执行&#34; http://vhosta&#34;,&#34; http://vhostb&#34;或&#34; http://vhostc&#34;。
我怎样才能做到这一点?到目前为止,我做的一切都是正确的吗?
任何帮助将不胜感激! 提前谢谢!
(我正在Windows 8.1上使用xampp。)
答案 0 :(得分:7)
有很多方法可以实现这一目标,但是你想要做的却不会起作用。 / etc / hosts是IP到主机名映射的基本方式。如果您想要循环解析,则必须使用DNS服务器。此外,除了学习和配置测试之外,在同一台机器上进行负载均衡没有多大意义。
这些是您的一些选择。
1)使用mod_proxy_balancer。您需要启用mod_proxy和mod_proxy_balancer模块。此外,您需要选择一个调度程序算法。选项包括:mod_lbmethod_byrequests,mod_lbmethod_bytraffic,mod_lbmethod_bybusyness和mod_lbmethod_heartbeat。
http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html
<VirtualHost *:80>
...
ServerName load-balancer
<Proxy balancer://mybalancers>
BalancerMember http://vhosta:80
BalancerMember http://vhostb:80
BalancerMember http://vhostc:80
</Proxy>
ProxyPass / balancer://mybalancers
ProxyPassReverse / balancer://mybalancers
...
</VirtualHost>
2)使用DNS循环选项。您需要将多个IP指向同一主机名。使用此选项,当您向负载均衡器主机发出请求时,DNS服务器将为您提供下一个IP(以循环方式)。
DNS配置
load-balancer IN A 10.0.0.1
load-balancer IN A 10.0.0.2
load-balancer IN A 10.0.0.3
apache服务器的虚拟主机
<VirtualHost 10.0.0.1:80>
DocumentRoot c:/vhosts/vhosta
ServerName load-balancer
</VirtualHost>
<VirtualHost 10.0.0.2:80>
DocumentRoot c:/vhosts/vhostb
ServerName load-balancer
</VirtualHost>
<VirtualHost 10.0.0.3:80>
DocumentRoot c:/vhosts/vhostc
ServerName load-balancer
</VirtualHost>
还有一件与hosts文件有关的事情。如果要将环回IP映射到主机名,请随意使用全范围,从127.0.0.0到127.255.255.255。我很确定这是在Windows中映射的,但我无法测试它。要测试,只需ping 127.1.2.3,看看你得到了什么。
http://en.wikipedia.org/wiki/Loopback
如果您需要多个IP进行测试,可以使用以下方法组织/ etc / hosts文件。
127.0.0.1 localhost
127.0.0.2 vhosta
127.0.0.3 vhostb
127.0.0.4 vhostc
127.0.0.5 load-balancer