配置实例四:对不同域名实现负载均衡

在该实例片段中,我们设置了两个虚拟服务器和两组后端被代理的服务器组,分别用来接收不同的域名请求和对这些请求进行负载均衡处理。

  • 如果客户端请求域名为“home.myweb.name”,则由服务器server 1接收并转向homebackend服务器组进行负载均衡处理;

  • 如果客户端请求域名为“bbs.myweb. name”,则由服务器server 2接收并转向bbsbackend服务器组进行负载均衡处理。


upstream bbsbackend
{
  server 192.168.1.2:80  weight=2;
  server 192.168.1.3:80  weight=2;
  server 192.168.1.4:80;
}
upstream homebackend
{
  server 192.168.1.4:80;
  server 192.168.1.5:80;
  server 192.168.1.6:80;
}
                                                        # 开始配置server 1
server
{
  listen 80;
  server_name  home.myweb.name;
  index  index.html  index.htm;
  location  /  {
    proxy_pass  http://homebackend;
    proxy_set_header  Host  $host;

  }

}
                                                        # 开始配置server 2
server
{
  listen 80;
  server_name  bbs.myweb.name;
  index  index.html  index.htm;
  location  /  {
    proxy_pass  http://bbsbackend;
    proxy_set_header  Host  $host;

  }

}

需要认识到server_name是一个匹配规则,匹配的是请求中的Host头,也就是说:客户端会访问Nginx服务器,然后Nginx会根据客户端发送过来的请求头中的Host字段来决定将请求转发给哪一个server。

存在两种实验方法:

  • 第一种是修改客户端的hosts文件,增加hostname到ip地址的映射规则:

    192.168.10.110 server1
    192.168.10.110 server2
  • 第二种是修改请求报文中的Host头字段。

在实际的工作场景中,hostname与ip地址的映射是通过DNS服务完成的,可以让不同网址指向部署了nginx的服务器。

Last updated