转载互联网

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配置如下:

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上

nginx根据cookie分流的更多相关文章

  1. nginx添加sticky cookie 分流模块

    需要下载nginx源码和sticky,在nginx配置文件中添加sticky模块,然后重新编译nginx. #准备安装基础环境:yum install gcc openssl-devel pcre-d ...

  2. 利用nginx解决cookie跨域

    一.写在前面 最近需要把阿里云上的四台服务器的项目迁移到客户提供的新的项目中,原来的四台服务器中用到了一级域名和二级域名.比如aaa.abc.com 和bbb.abc.com 和ccc.abc.com ...

  3. nginx处理cookie跨域

    今天在部署公司项目的时候碰到一个问题 项目地址是xxx.xx.xx.122:7480 项目A后台请求地址为xxx.xx.xx.123:8080/data-sso 开始nginx配置是 server { ...

  4. 关于 Nginx 配置的一些疑惑, Nginx 根据cookie 进行rewrite

    网站目录结构如下:/public/en.html/public/zh_cn.html/public/index.php 之前所有的非静态资源请求都交给 index.php现在要把首页的请求 不走PHP ...

  5. nginx用cookie控制访问权限实现方法

    自己的一个需求需要对a.b.com 下的 /c 这个目录下,cookie d=e 才能访问,如果不是,就重定向到f.html 下面看代码.  代码如下 复制代码 server{       serve ...

  6. Nginx安装及分流多个web服务

    Ngnix安装及常用配置 一.安装Nginx 1.检查依赖 yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib ...

  7. nginx--cookies转发

    nginx根据cookie分流   nginx根据cookie分流众所周知,nginx可以根据url path进行分流,殊不知对于cookie分流也很强大,同时这也是我上篇提到的小流量实验的基础. 二 ...

  8. nginx:负载均衡(三)分流策略

    [1]轮询策略.轮询策略是最简单的策略,无脑配置,不考虑服务器的访问的能力.每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除 upstream www.daysn. ...

  9. 使用Nginx实现灰度发布

    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B ...

随机推荐

  1. 我的Git

    1.git 的安装与配置. 首先,对git进行下载.然后,在本地安装后进行版本查看,win10系统通过win+r快捷键打开控制台,然后用git --version的cmd命令查看git版本. 然后对g ...

  2. 学习 Spring (四) Bean 的生命周期

    Spring入门篇 学习笔记 定义 --> 初始化 --> 使用 --> 销毁 初始化 实现 org.springframework.beans.factory.Initializi ...

  3. Java 下载 HLS (m3u8) 视频

    下载索引文件 public String getIndexFile() throws Exception{ URL url = new URL(originUrlpath); //下载资源 Buffe ...

  4. win10系统同时安装python2.7和python3.6

    我是先在本机上安装的python3.6.5,因为要学习一个框架,但是这个框架只支持python2,所以我又安装了python2.7.15,并且配置到系统环境变量 环境变量配置了python3.6.5的 ...

  5. 【AGC018F】Two Trees 构造 黑白染色

    题目描述 有两棵有根树,顶点的编号都是\(1\)~\(n\). 你要给每个点一个权值\(a_i\),使得对于两棵树的所有顶点\(x\),满足\(|x\)的子树的权值和\(|=1\) \(n\leq 1 ...

  6. PHP linux ZendGuardLoader.so: undefined symbol: executor_globals

    /usr/xxx/php    xxx/xxx.php 报了这个错. 本人出现此问题的原因:  php执行程序路径错了. 解决: linux下执行   which php   命令  查看php真实路 ...

  7. pytorch kaggle 泰坦尼克生存预测

    也不知道对不对,就凭着自己的思路写了一个 数据集:https://www.kaggle.com/c/titanic/data import torch import torch.nn as nn im ...

  8. 【hdu 6161】Big binary tree(二叉树、dp)

    多校9 1001 hdu 6161 Big binary tree 题意 有一个完全二叉树.编号i的点值是i,操作1是修改一个点的值为x,操作2是查询经过点u的所有路径的路径和最大值.10^5个点,1 ...

  9. JLOI2015 DAY2 简要题解

    「JLOI2015」骗我呢 题意 问有多少个 \(n \times m\) 的矩阵 \(\{x_{i, j}\}\) 满足 对于 \(\forall i \in [1, n], j \in [1, m ...

  10. 自学Python4.8-生成器(方式二:生成器表达式)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...