这里主要介绍七层负载方式实现。
环境说明:
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 nginxAndroid端:
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,剩下的由网站服务器处理,这样便大大提升了用户访问体验,这是当前企业网站非常常用的解决方案