这里主要介绍七层负载方式实现。
环境说明:
pc端 web-1
苹果ios端 web-2
安卓Android端 web-3
负载均衡 web-lb
配置示例:
pc端:
server {listen 9000; #监听9000server_name pc.xxx.com;charset utf-8;location / {root /code/pc;index index.html;} }# 创建站点目录 mkdir /code/pc echo '这里是pc端页面' > /code/pc/index.html# 检查语法,重启nginxnginx -tsystemctl 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# 检查语法,重启nginxnginx -tsystemctl restart nginx
Android端:
vim andorid.confserver {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# 检查语法,重启nginxnginx -tsystemctl restart nginx
负载均衡web-lb:
# 资源分离配置 cd /etc/nginx/conf.dvim proxy_1.confupstream 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;} }# 检查语法重载nginxnginx -tnginx -s reload
四层方案和七层方案对比说明:
四层方案需要记忆不同域名,通过不同域名引导用户到指定的后端服务器。
七层则不用。七层对外只需要用一个域名,如www.test.com,然后通过获取用户请求中的设备信息(利用日志中的 $http_user_agent 获取),根据这些信息转给后端合适的服务器处理即可。这个方案最大好处就是不需要让用户记忆多个域名,用户只需要记住主网站地址 www.test.com,剩下的由网站服务器处理,这样便大大提升了用户访问体验,这是当前企业网站非常常用的解决方案