利用 openresty balancer_by_lua 实现一个简单的 ip_hash upstream 调度

以下基于 OpenResty balancer_by_lua 配置指令, 利用 ngx.crc32_long 根据源地址与目的端口生成hash, 实现一个简单的 ip_hash upstream. 仅供参考 

upstream backend{
    server 0.0.0.0;
    balancer_by_lua_block {
        local balancer = require "ngx.balancer"
        local host = {"192.168.1.111", "192.168.1.112"}
        local backend = ""
        local port = ngx.var.server_port
        local remote_ip = ngx.var.remote_addr
        local key = remote_ip..port
        local hash = ngx.crc32_long(key);
        hash = (hash % 2) + 1
        backend = host[hash]
        ngx.log(ngx.DEBUG, "ip_hash=", ngx.var.remote_addr, " hash=", hash, " up=", backend, ":", port)
        local ok, err = balancer.set_current_peer(backend, port)
        if not ok then
            ngx.log(ngx.ERR, "failed to set the current peer: ", err)
            return ngx.exit(500)
        end
        ngx.log(ngx.DEBUG, "current peer ", backend, ":", port)
    }
}

server {
	listen 80;
	listen 8080;
	listen 7777;
	server_name *.x.com
	location / {
		proxy_pass http://backend;
	}
}

参考:

https://github.com/openresty/lua-nginx-module

你可能感兴趣的:(运维)