LEN

Nginx $requert_uri 参数 变量 hash 负载
最近在搞资产服务, 我们希望统一uid用户的资产操作都在同一进程下排队进行处理第一步 需要在Nginx 负载保证用...
扫描右侧二维码阅读全文
24
2018/08

Nginx $requert_uri 参数 变量 hash 负载

最近在搞资产服务, 我们希望统一uid用户的资产操作都在同一进程下排队进行处理
第一步 需要在Nginx 负载保证用户id 落在同一后端机器上
解决方案很简单 利用 upstream hash $mode 达到目的
匹配 uri 中 参数uid 赋值 $mode 配置如下:

server {
        listen       8010;

        location / {
                set $mode "test";
                if ($request_uri ~* uid=([0-9]+)) {
                        set $mode $1;
                }

                proxy_pass http://swoole_assets;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }
}

upstream swoole_assets{  
        server 127.0.0.1:8011;  
        server 127.0.0.1:8012;  
        server 127.0.0.1:8013;  
        hash $mode;
}

server {
        listen       8013;

        location / {
            default_type text/html;
            content_by_lua '
                ngx.say(8013)
            ';
        }
}

server {
        listen       8012;

        location / {
            default_type text/html;
            content_by_lua '
                ngx.say(8012)
            ';
        }
}

server {
        listen       8011;

        location / {
            default_type text/html;
            content_by_lua '
                ngx.say(8011)
            ';
        }
}

效果还算理想
后端服务使用 swoole 200进程 dispatch_func 自定义匹配方法分配worker_id
详情以后更新

Last modification:August 24th, 2018 at 10:41 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment