首页 > 其他 > 详细

nginx根据cookie分流

时间:2014-05-05 12:05:17      阅读:420      评论:0      收藏:0      [点我收藏+]

nginx根据cookie分流
众所周知,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配置如下:

bubuko.com,布布扣
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;
} 
}
bubuko.com,布布扣

 



方案2:
利用set和if…else… ,nginx.conf配置如下:

bubuko.com,布布扣
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;
}

}

 

map $COOKIE_id $group { 
700003508 admin; 
~*3$ admin; 
default user; 
} 

upstream backend_user { 
server 10.3.24.11:8080; 
} 

upstream backend_admin { 
server 10.3.25.21:8081; 
} 

server { 
listen 80; 
server_name photo.domain.com; 

location / { 
proxy_pass http://backend_$group; 
} 
} 
bubuko.com,布布扣

 


首先,是在nginx里面配置一个映射,$COOKIE_id可以解析出cookie里面的id字段,$group是一个变量,{}里面是映射规则,

这样,如果一个id为700003508的人来访问,$group就等于admin。

然后在server里面使用就会代理到http://backend_admin上

 

转自:http://blog.csdn.net/yanook/article/details/8275716

nginx根据cookie分流,布布扣,bubuko.com

nginx根据cookie分流

原文:http://www.cnblogs.com/olmlo/p/3705980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!