nginx根据cookie分流
2014-05-04 07:21
821 查看
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配置如下:
方案2:
利用set和if…else… ,nginx.conf配置如下:
首先,是在nginx里面配置一个映射,$COOKIE_id可以解析出cookie里面的id字段,$group是一个变量,{}里面是映射规则,
这样,如果一个id为700003508的人来访问,$group就等于admin。
然后在server里面使用就会代理到http://backend_admin上
转自:http://blog.csdn.net/yanook/article/details/8275716
众所周知,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; } } 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; } }
首先,是在nginx里面配置一个映射,$COOKIE_id可以解析出cookie里面的id字段,$group是一个变量,{}里面是映射规则,
这样,如果一个id为700003508的人来访问,$group就等于admin。
然后在server里面使用就会代理到http://backend_admin上
转自:http://blog.csdn.net/yanook/article/details/8275716
相关文章推荐
- nginx根据cookie分流
- nginx根据cookie分流
- nginx根据cookie里的信息分流
- nginx根据cookie分流
- nginx添加sticky cookie 分流模块
- nginx对根据ip尾数转发分流
- nginx根据cookie分发
- nginx根据IP尾数分流,配置文件如下
- python 抓取, 根据cookie
- nginx使用proxy_pass反向代理时cookie丢失问题解决方案
- 技术文章 | nginx lua 小项目:根据 user_agent 显示不同的页面_附带和 php 性能的对比
- 根据url获取请求中的cookie
- Nginx实现根据域名http、https分发配置示例
- nginx根据日志清除缓存脚本
- 关于NGINX利用location的匹配规则分流和利用server的server_name分流
- nginx根据Url发送文件解析
- nginx 同一端口根据不同域名转发到不同端口
- 利用nginx实现分流
- CentOS 6.9安装Nginx,根据地址转发请求
- nginx跟据url进行分流