Nginx高效分发之cookie篇

Nginx在做http代理转发的角色时,我们可能有需要针对不同用户请求的header,分布到不同的上游upstream服务器组。这里使用Cookie对用户进行分类,然后配置Nginx实现上游服务器的分发。

业务场景:

一、 根据用户所在城市分发,这里使用了map模块对匹配内容进行分发

1. upstream模块配置:

upstream sh {

server sh.domain.com;

}

upstream nj {

server nj.domain.com;

}

upstream web {

server web.domain.com;

}

2. map模块配置:

map $cookie_user_city $upst {

default web;

~sh sh;

~nj nj;

}

3. server模块配置:

server {

listen 80;

server_name www.domain.com;

location / {

proxy_pass http://$upst;

}

}

4. 访问测试:

curl -i -b ‘user_city=sh‘ http://www.domain.com

二、根据用户请求ip进行分发,这里使用了geo模块对匹配内容进行分发

1. upstream模块配置:

upstream test {

server test.domain.com;

}

upstream nj_test {

server nj.test.domain.com;

}

upstream sh_pro {

server sh.domain.com;

}

2. geo模块配置

geo $remote_addr $ip_list {

192.168.0.0/24 test;

10.0.0.0/8 test;

172.16.0.0/16 test;

211.156.181.25 nj_test;

}

3. server模块配置:

server {

listen 80;

server_name www.domain.com;

location / {

if ($ip_list = ‘test‘){

proxy_pass http://test;

}

if ($ip_list = ‘nj_test‘){

proxy_pass http://nj_test;

}

proxy_pass http://sh_pro;

}

}

这里来简单介绍一下map模块和geo模块。

map模块是由ngx_http_map_module提供的,默认安装,除非使用--without-http_map_module指令。map模块可以创建变量进行关联,可以整合多个不同的值到map模块是由ngx_http_map_module提供的,默认安装,除非使用--without-http_map_module指令。map模块可以创建变量进行关联,可以整合多个不同的值到一个或多个相同的值并存储到变量当中,它维护的是一个映射关系。

geo模块是由ngx_http_geo_module提供的,默认安装,除非使用--without-http_geo_module。它是专门用来对IP进行分类的,可以将多个来源IP进行分组,用以实现让不同来源的IP访问不同的上游服务器。注意,geo模块非geoip模块。

时间: 2024-10-25 21:13:55

Nginx高效分发之cookie篇的相关文章

高效开发之SASS篇

作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家都知道,js中可以自定义变量,css仅仅是一个标记语言,不是编程语言,因此不可以自定义变量,也不可以引用等等.作为一名程序员,不能编程怎么能忍受,这就是sass存在的意义,工业化生产,让CSS程序范儿. 主要目的就是让你写CSS时不在重复. SASS优点可以简单的规纳为以下几点: 增加了一些编程特性 简少CSS代码的重复性与

打造程序员的高效生产力工具-mac篇

打造程序员的高效生产力工具-mac篇 1   概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输出前,有必要先“利其器”,为自己打造一台专门为程序员而生的电脑生产平台.以保证自己高效地工作和产出. 本系统的主要适用群体为互联网行业的开发人员和环境配置指导,主要目的是让Mac成为程序员的重要的智力成果输出工具. 2   需求场景 3   开发环境 对于软件开发人员来说,基本上绝大多数的IDE都有

Mac高效开发之iTerm2、Prezto和Solarized主题

本文首发于个人网站:Mac高效开发之iTerm2.Prezto和Solarized主题 工欲善其事必先利其器,作为开发,我追求极致的高效,因此会在很多细节上追求效率,例如:命令行窗口敲命令的时候,如果能善用快捷键,就可以在短时间内敲更多的命令:IDEA的快捷键如果用得熟,在同样时间内,就可以产出更多的代码.这篇文章主要总结了我对iTerm2的使用,延伸出来了Zsh的配置框架Prezto和护眼主题Solarized的安装和配置. iTerm2 iTerm2是非常好用的终端,我在拿到新的Mac后,第

[cookie篇]从cookie-parser中间件说起

当我们在写web的时候,难免会要使用到cookie,由于node.js有了express这个web框架,我们就可以方便地去建站.在使用express时,经常会使用到cookie-parser这个插件.今天我们来分析一下这个插件. 这个插件通常当作中间件使用,app.use(cookieParser()), 这样就可以处理每一个请求的cookie. 从名字上看,这就是一个解释Cookie的工具.通过req.cookies可以取到传过来的cookie,并把它们转成对象.下面,我们来深入它的源码. 首

使用nginx sticky实现基于cookie的负载均衡

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器.如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐. 如果浏览器不支持coo

Swing开发之JComboBox篇

JList和ComboBox很相似,因为这两个组件都显示一个项列表.因此,它们都有扩展ListModel接口的模型.而且,这两个组件都有绘制器,这些绘制器通过实现ListCellBenderer接口来绘制列表单元. 但是,列表和组合框在施工方面还是有差别的.列表单是不可编辑的,但是组合框可以配备一个编辑器.JComboBox组件把编辑工作交给实现ComboBoxEdit接口的一个对象来处理. 列表支持三个选取模式,并把选取工作实现ListSelectionModel接口的一个对象来处理.组合框在

使用nginx sticky实现基于cookie的负载均衡【转】

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器.如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐. 如果浏览器不支持coo

AndroidWear开发之HelloWorld篇

通过前一篇的学习,我们把环境都搭建好了,这下我们就可以正真的开发了. 一.创建Wear项目 通过项目创建向导一步一步下去就可以创建好一个Wear项目: 1.新建项目,一次填入应用名字,应用包名,项目位置,搞android都很熟悉的. 2.这里我们选择Wear SDK 3.创建一个WearActivity,启动Activity入口 4.起好名字,我们默认就可以了. 二.修正错误 稍等片刻as就帮你把项目建立好了,不过你会发现报错了 系统找不到WatchActivity,这里我google了一把,得

Mobile开发之meta篇

<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimal-ui" /> width: viewport 的宽度 (范围从 200 到 10,000 ,默认为 980 像素 ) height: viewport 的高度 (范围从 223 到 10,000 ) initial-scale: 初始的缩放比例 (范围从>0到 1