nginx--cookies转发
nginx根据cookie分流
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上
转自:http://blog.csdn.net/yanook/article/details/8275716
nginx--cookies转发的更多相关文章
- Nginx代理转发Apache+svn
1.安装svn和httpd yum install httpd yum install subversion mod_dav_svn 创建仓库目录 mkdir -p /var/www/svn 3.创建 ...
- 使用Nginx做转发和匹配替换
Nginx是一个强大的服务器软件,由于处理数据内容处于第七层协议应用层的原因,所以获取的数据也比较完整: Nginx做转发: 这个很简单,vi nginx.conf(编辑nginx配置文件) 添加lo ...
- nginx 端口转发
nginx 端口转发 默认nginx监听的端口是8080,想通过配置nginx访问80直接跳转到nginx,以下是配置方法: [root@localhost vhost]# cat tomcat.jo ...
- 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发
前言 我们之前聊过 10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡:https://www.cnblogs.com/xiongze520/p/103087 ...
- Nginx 路由转发配置(转)
Nginx 路由转发配置笔记 由于预算有限,只有一台服务器,想要玩的东西不少,所以这个台服务器上会提供多重服务,因此涉及到的nginx转发就必有重要了 由nginx做请求代理,提供多种服务 php搭建 ...
- nginx域名转发
场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发 实现: server { listen 8051; server_name lo ...
- Linux下使用Nginx端口转发出现502错误的一种解决办法
今天圈里的一个朋友在配置完nfinx80端口转发到5000后,发现一个问题 问题描述: 正确配置了Nginx80端口转5000端口,在CentOS上把.Net core WebAPI站点上传到cent ...
- nginx rewrite (转发)
1.location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所 ...
- centos7 编译安装nginx+tcp转发
一.依赖 1. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装: yum install gcc-c++ 2. PCRE pc ...
- 手头没证书,如何给https做代理?Nginx TCP转发
线上的一个海外充值接口(https)经常因我朝网络问题中断,想借助hk的机器做个https反向代理又没证书. 一开始 一开始想到的办法是借助Nginx的tcp转发进行代理: 编译NGINX时加入 -- ...
随机推荐
- proc_info_list
内核中每种处理器架构抽象为一个proc_info_list结构体,在arch/arm/include/asm/procinfo.h中定义, struct proc_info_list { unsign ...
- Cleaning Shifts POJ - 2376 (贪心题)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31194 Accepted: 7677 ...
- poj 1995 快速幂
题意:给出A1,…,AH,B1,…,BH以及M,求(A1^B1+A2^B2+ … +AH^BH)mod M. 思路:快速幂 实例 3^11 11=2^0+2^1+2^3 => 3^1*3 ...
- bash脚本编写基础
bash脚本编程 命令的堆砌 脚本程序:解释器解析执行 shell:交互式接口,编程环境 shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...
- luogu1233 木棍加工
先排个序然后做最长上升子序列就行了. #include <algorithm> #include <iostream> #include <cstdio> usin ...
- BugBash活动分享
此文已由作者夏君授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. BugBash源至微软概念,翻译为<缺陷大扫除>,顾名思义是集中大家力量全面清扫Bug,确保产品质 ...
- 谋哥:搞APP,做得累的都不对!
最近谋哥(微信viyi88)我刚加入“秦王会”,思想收到猛烈地冲击,各位大佬的思维有时候会让我大脑短路,收获不少.同时,我也慢慢发现我一直平静的 心开始浮躁,我发现苗头不对,于是开始静下心来.静下心, ...
- spring AOP详解三
CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截的结束拦截所有父类方法的调用,并顺势织入横切逻辑.我们采用CGLib技术可以编写一个可以为任何类创建织入横切逻辑代理对象 ...
- js多少时间之前
<?php $time = time()*1000; $end_time = strtotime("2018-01-01")*1000; $time_ago = $time ...
- 简单实用jstl实现“登录|注册”
package com.ceshi; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.s ...