Openresty balancer by lua 实现一个简单的 ip hash upstream

来自Linux78|wiki

以下基于 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;
   }
}