Nginx 进阶篇(二);根据客户端的设备(user_agent)转发实践(七层负载均衡)

一、 负载均衡分类

1、二层负载均衡(mac)
    根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.

2、三层负载均衡(ip)
    一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应. (即一个ip对一个ip的转发, 端口全放开)
3、四层负载均衡(tcp)
    在三次负载均衡的基础上,即从第四层"传输层"开始, 使用"ip+port"接收请求,再转发到对应的机器。
4、七层负载均衡(http)
    从第七层"应用层"开始, 根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。

注:我们运维中最常见的四层和七层负载均衡,这里重点说下这两种负载均衡。

二、根据客户端的设备(user_agent)转发实践需求

须知:在企业中,为了让不同的客户端设备用户访问有更好的体验,需要在后端架设不同的服务器来满足不同的客户端的访问,例如:移动客户端访问网站,就需要单独部署移动服务器,而且移动端还分苹果、安卓、Ipad等。

1、常规4层负载均衡解决方案架构(传统情况下,一般使用这个方法)

  (1)原理:使用不同的域名来实现这个需求

  (2)例如:人为分配好让移动端用户访问wap.baidu.com,PC客户端用户访问www.baidu.com

  (3)此解决方案最大的问题:不同的客户端用户需要记住对应的域名!但是绝大部分用户只会记住www.baidu.com,而不会记住wap.baidu.com。这样以来用户的上网体验就会非常的差。

  (4)怎么解决这个问题,实现用户只需要记住www.baidu.com这个地址,而且不同的客户端设备都能有非常好的访问体验呢?

     答:采用第七层负载均衡解决方案

 

2、第七层负载均衡解决方案

    这个解决方案下,就只需要记住一个域名即可,然后负载均衡器通过获取用户请求中的设备信息(利用$http_user_agent获取),根据这些信息转给后端合适的服务器处理。

如下为描述上述解决方案的架构逻辑图:

Nginx 进阶篇(二);根据客户端的设备(user_agent)转发实践(七层负载均衡)_第1张图片

三、根据客户端设备(user_agent)转发请求实战

下面这个就是我找的一个$http_user_agent的值:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15

(KHTML, like Gecko) Version/13.0.2 Safari/605.1.15

1、简单配置

Nginx负载均衡代理服务器配置:

        location / {
            echo 2;
        if ($http_user_agent ~* "Firefox"){
            proxy_pass http://www;
            include /usr/local/nginx/conf/vhost/proxy.conf;
        }

网页请求处理服务器配置:
        location / {
        echo 1;
        }

实现用Firefox浏览器浏览时,发送1,使用其他浏览器时,发送2

 

2、实现7层负载均衡加反向代理集群架构:

http {
    upstream www{
       server 172.16.193.163;
    }
    upstream wap{
        server 172.16.193.164;
    }
    server {
        listen       80;
        server_name  www.baidu.com;
        location / {
            echo 2;
        if ($http_user_agent ~* "android"){ //如果是安卓,就转发到名叫wap的移动服务器池中去
            proxy_pass http://wap;
            include conf/vhost/proxy.conf
        }
        if ($http_user_agent ~* "MSIE"){ //如果是IE浏览器就转发到名叫www的pc服务器池中
            proxy_pass http://www;
            include conf/vhost/proxy.conf
        }
        }
    }
}

注:至于转发到相应的服务器,服务器怎么根据设备来进行网页优化和前端设计,这就不是运维的工作了。有兴趣也可以去了解了解。

你可能感兴趣的:(Linux运维)