如何为多个虚拟主机 (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