如何为多个虚拟主机 (apache) 设置负载均衡器
How can I set up a load balancer for multiple virtual hosts (apache)
我正在尝试为我的 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 语句)。
现在,我可以通过浏览器访问“http://vhosta”等访问虚拟主机
但我需要的是制作一个选择执行“http://vhosta”、“http://vhostb”或“[=”的负载均衡器31=]http://vhostc".
我怎样才能做到这一点?到目前为止我做的一切都正确吗?
任何帮助将不胜感激!
提前致谢!
(顺便说一句,我在 windows 8.1 上使用 xampp。)
有很多方法可以做到这一点,但你试图做的是行不通的。 /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>
还有一件事与主机文件有关。如果您想将环回 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
我正在尝试为我的 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 语句)。
现在,我可以通过浏览器访问“http://vhosta”等访问虚拟主机
但我需要的是制作一个选择执行“http://vhosta”、“http://vhostb”或“[=”的负载均衡器31=]http://vhostc".
我怎样才能做到这一点?到目前为止我做的一切都正确吗?
任何帮助将不胜感激! 提前致谢!
(顺便说一句,我在 windows 8.1 上使用 xampp。)
有很多方法可以做到这一点,但你试图做的是行不通的。 /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>
还有一件事与主机文件有关。如果您想将环回 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