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;
    	}
     
    }
     
  • 相关阅读:
    P5318 【深基18.例3】查找文献 —— 图的两种遍历
    电子合同有效性需要解决的问题
    软件测试流程
    浅析HTTP与HTTPS的区别
    输入URL到网页显示的全过程
    TCP协议详细讲解
    Git操作
    robot framework环境搭建及注意事项
    测试面试问题总汇
    python之random模块详解
  • 原文地址:https://www.cnblogs.com/myyan/p/5813308.html
Copyright © 2011-2022 走看看