首页 > 代码库 > Nginx高效分发之cookie篇

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模块。


本文出自 “致信” 博客,请务必保留此出处http://leon0long.blog.51cto.com/3011404/1917256

Nginx高效分发之cookie篇