• 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

  • 相关阅读:
    [转载]必须Mark!最佳HTML5应用开发工具推荐
    [转载]JavaScript 的轻框架开发
    [转载]Browser Link feature in Visual Studio Preview 2013
    回溯算法
    双指针法总结
    链表中的快慢指针法
    快慢指针之原地处理数组/链表
    滑动窗口法
    左右指针法:二分查找-其它应用
    左右指针法:二分查找-寻找数
  • 原文地址:https://www.cnblogs.com/anyehome/p/10943477.html
Copyright © 2020-2023  润新知