zoukankan      html  css  js  c++  java
  • 利用nginx实现分流

    众所周知,nginx可以根据url path进行分流,殊不知对于cookie分流也很强大,同时这也是我上篇提到的小流量实验的基础。
     
    二话不说,先看需求,两台服务器分别定义为
    apache001:192.168.1.1:8080
    apache002:192.168.1.2:8080
     
    默认服务器为:
    default:192.168.1.0:8080
     
    前端nginx服务器监听端口8080,需要根据cookie转发,查询的cookie的键(key)为abcdexpid,如果该cookie值(value)以1结尾则转发到apache001,以2结尾则转发到apache002。
     

    方案1:

    用map,nginx.conf配置如下:
     
    map $COOKIE_abcdexpid $group {
    	~*1$	apache001;
    	~*2$	apache002;
    	default	root;
    }
     
    upstream apache001 {
    	server 192.168.1.1:8080 weight=1 max_fails=1 fail_timeout=30s;
    }
     
    upstream apache002 {
    	server 192.168.1.2:8080 weight=1 max_fails=1 fail_timeout=30s;
    }
     
    upstream root {
    	server 192.168.1.0:8080 weight=1 max_fails=1 fail_timeout=30s;
    }
     
    server {
    	listen       8080;
    	server_name  neoremind.net;
     
    	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    					  '$status $body_bytes_sent "$http_referer" "group=$group"'
    					  '"$http_user_agent" $gzip_ratio $request_time "$http_x_forwarded_for"';
     
    	access_log  logs/access_log main;
    	error_log   logs/error_log;
     
    	location / {
            proxy_pass http://$group;
    		proxy_set_header X-Forwarded-For $remote_addr;
        }	
    }
     
     

    方案2:

    利用set和if…else… ,nginx.conf配置如下:
     
     
    upstream apache001 {
    	server 192.168.1.1:8080 weight=1 max_fails=1 fail_timeout=30s;
    }
     
    upstream apache002 {
    	server 192.168.1.2:8080 weight=1 max_fails=1 fail_timeout=30s;
    }
     
    upstream root {
    	server 192.168.1.0:8080 weight=1 max_fails=1 fail_timeout=30s;
    }
     
    server {
    	listen       8080;
    	server_name  beidoutest.baidu.com;
     
    	#match cookie
    	set $group "root";
    	if ($http_cookie ~* "abcdexpid=([^;]+)(1$)"){
    		set $group apache001;
    	}
    	if ($http_cookie ~* "abcdexpid=([^;]+)(2$)"){
    		set $group apache002;
    	}
     
    	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    					  '$status $body_bytes_sent "$http_referer" "group=$group"'
    					  '"$http_user_agent" $gzip_ratio $request_time "$http_x_forwarded_for"';
     
    	access_log  logs/access_log main;
    	error_log   logs/error_log;
     
    	location / {
    		proxy_pass http://$group;
    		proxy_set_header X-Forwarded-For $remote_addr;
    	}
     
    }
     
  • 相关阅读:
    js对象的sessionStorage,判断对象相等,判断是否包含某属性
    vant-ui的van-area使用
    JavaScript返回格式化的时间字符串
    vant-ui的van-uploader上传图片
    移动端vue页面禁止移动/滚动
    vue项目中的跨域源请求拦截问题CORS头缺少'Access-Control-Allow-Origin'
    项目开发过程中踩坑和填坑
    周报
    构建一个最简单的react程序
    Socket实现简易“多人聊天室”
  • 原文地址:https://www.cnblogs.com/myyan/p/5813308.html
Copyright © 2011-2022 走看看