nginx根据不同的客户端设备进行转发请求——筑梦之路

这里主要介绍七层负载方式实现。

环境说明:

pc端    web-1   

苹果ios端  web-2

安卓Android端  web-3

负载均衡   web-lb

配置示例:

pc端:

server {
      listen 9000;  #监听9000
      server_name pc.xxx.com;
      charset utf-8;

      location / {
              root /code/pc;
              index index.html;
      }
}

# 创建站点目录
mkdir /code/pc
echo '这里是pc端页面' > /code/pc/index.html

# 检查语法,重启nginx

nginx -t

systemctl restart nginx

苹果ios端:

server {
      listen 9001;
      server_name ios.xxx.com;
      charset utf-8;

      location / {
              root /code/ios;
              index index.html;
      }
}

# 站点目录
mkdir /code/ios
echo '这里是ios端页面' > /code/ios/index.html

# 检查语法,重启nginx

nginx -t

systemctl restart nginx

Android端:


vim andorid.conf

server {
      listen 9002;
      server_name andorid.xxx.com;
      charset utf-8;

      location / {
              root /code/andorid;
              index index.html;
      }
}

# 站点目录
mkdir /code/andorid
echo '这里是andorid端页面' > /code/andorid/index.html

# 检查语法,重启nginx

nginx -t

systemctl restart nginx

负载均衡web-lb:

# 资源分离配置
cd /etc/nginx/conf.d

vim proxy_1.conf

upstream pc {
  server 172.16.1.7:9000;
}

upstream android {
  server 172.16.1.8:9001;
}

upstream ios {
  server 172.16.1.9:9002;
}

server {
  listen 80;
  server_name bl.xxx.com;
  charset 'utf-8';
  location / {

  #如果客户端来源是Android则跳转到Android的资源;
  if ($http_user_agent ~* "android") {
     proxy_pass http://android;
  }
  
  #如果客户端来源是ios则跳转到ios的资源;
  if ($http_user_agent ~* "iphone") {
     proxy_pass http://ios;
  }

  #如果客户端是IE浏览器则返回403错误;
  if ($http_user_agent ~* "MSIE") {
     return 403;
  }
 
  #默认跳转pc资源;
    proxy_pass http://pc;
  }
}

# 检查语法重载nginx

nginx -t

nginx -s reload

四层方案和七层方案对比说明:

四层方案需要记忆不同域名,通过不同域名引导用户到指定的后端服务器。

七层则不用。七层对外只需要用一个域名,如www.test.com,然后通过获取用户请求中的设备信息(利用日志中的 $http_user_agent 获取),根据这些信息转给后端合适的服务器处理即可。这个方案最大好处就是不需要让用户记忆多个域名,用户只需要记住主网站地址 www.test.com,剩下的由网站服务器处理,这样便大大提升了用户访问体验,这是当前企业网站非常常用的解决方案

你可能感兴趣的:(linux系统运维,nginx,运维)