利用nginx实现分流
2016-08-27 16:47
225 查看
转自http://neoremind.com/2012/03/nginx%E6%A0%B9%E6%8D%AEcookie%E5%88%86%E6%B5%81/
众所周知,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。
众所周知,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; } } |
相关文章推荐
- 利用Nginx的X-Accel-Redirect头实现下载控制(附带php和rails实例)
- 利用Nginx替代apache实现高性能的Web环境
- 利用Nginx 实现负载均衡代理(有图有真相)
- 利用nginx+lua+memcache实现灰度发布
- nginx 配置轮询分流-实现负载均衡【测试通过】
- 利用Nginx替代apache实现高性能的Web环境
- 利用vrrp实现路由器之间的分流及备份!(H3C)
- 利用vrrp实现路由器之间的分流及备份!(H3C) 推荐
- 利用nginx subrequest实现与多个后端server的交互
- nginx 配置轮询分流-实现负载均衡
- Nginx实践1 利用proxy_store实现高效的静态文件分布缓存服务器
- 利用Nginx+Keepalived实现web负载均衡
- 利用LVS+Keepalived+Nginx实现高性能高可用负载均衡服务器
- 利用Nginx实现动静分离和负载均衡
- 利用Nginx 实现负载均衡代理(有图有真相)
- 利用Nginx替代apache实现高性能的Web环境(第二版
- 利用Nginx实现动静分离和负载均衡
- 利用Nginx的上传模块和上传进度模块实现网页上传文件
- 利用Nginx实现动静分离和负载均衡
- 利用nginx+lua+memcache实现灰度发布