• 利用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;
    	}
     
    }
     
  • 相关阅读:
    用户界面线程(含有消息泵的线程)主线程与用户界面线程的通信
    poj 2151 Check the difficulty of problems 概率dp
    Codeforces 148D Bag of mice 概率dp
    [置顶] UVa在线比赛单题汇总DP专题
    UVa 10405 Longest Common Subsequence 最长公共子序列模板
    UVa 12018 Juice Extractor 切水果dp暂时存疑
    UVa 674 Coin Change 背包dp
    hdu 3853 LOOPS 圆环之理 概率dp
    UVa 111 History Grading 最长递增子序列 LIS
    UVa在线比赛单题汇总DP专题
  • 原文地址:https://www.cnblogs.com/myyan/p/5813308.html
Copyright © 2020-2023  润新知