美文网首页
nginx 通过upstream实现反向代理

nginx 通过upstream实现反向代理

作者: MOIC_Qu | 来源:发表于2020-03-17 16:10 被阅读0次

最近接触打点相关需求,因服务是lvs,请求的机器具有随机性。所以接触到了nginx反向代理,这里是应用于openresty服务的配置当中,使用ngx.balancer。看了一些博客,又向各位大佬们学到了很多~

反向代理

反向代理(Reverse Proxy):指来自用户的请求,访问代理服务器,然后代理服务器通过一些判断,将请求发送到某台服务器,发送成功后,将接收到的数据返回至用户。此时代理服务器就为一台反向代理服务器。

应用场景:本次应用场景是使同一用户的请求发送至同一台服务器,根据用户uid或sid来判断。

upstream实现简单的负载均衡

访问nginx服务80端口,请求随机发送server 1~3

upstream test {
    server 192.168.0.1;
    server 192.168.0.2;
    server 192.168.0.3;
}

server {
  location / {
    listen 80;
    proxy_pass http://test;
  }
}

upstream在conf/nginx.conf配置

访问服务80端口,请求到达upstream,获取uid作为key,如果无uid则使用sid作为key,如果均没有,贼使用随机数。进行hash映射到对应的host,从而达到同一用户请求同一机器。

    upstream change {
        server 0.0.0.0;
        balancer_by_lua_block {
            local balancer = require "ngx.balancer"
            local host = {"1.1.1.1", "2.2.2.2"} #服务所在的机器列表
            local backend = ""
            local port = 8088
            local key = ngx.var.arg_uid or ""
            if key == "" then
                key = ngx.var.arg_sid or ""
            end

            if key == "" then
                key = math.random(1,1000)
            end
            local hash = ngx.crc32_long(key);
            hash = (hash % 2) + 1
            backend = host[hash]
            ngx.log(ngx.INFO, "upstream test"," key:", key, " hash:", hash, " host:", change, " ip:", ngx.var.remote_addr)
            local ok, err = balancer.set_current_peer(change, port)
                if not ok then
                    ngx.log(ngx.ERR, "failed to set : ", err)
                    return ngx.exit(500)
                end
        }
    }

 
    server {
        listen 80;
        access_log  /dev/null;
        location / {
            proxy_pass http://change;
        }
    }

相关文章

网友评论

      本文标题:nginx 通过upstream实现反向代理

      本文链接:https://www.haomeiwen.com/subject/juityhtx.html