Variables Nginx随机变量

Variables Nginx随机变量,variables,nginx,lua,webserver,openresty,Variables,Nginx,Lua,Webserver,Openresty,早上好, 我试图在nginx上创建随机变量(我有openrestynginx+lua)。 下面是一个静态变量的示例: set $teste 123; 那么是否可以将此静态变量随机化呢?如果您使用的是openresty,您可以在lua的帮助下执行此操作,例如(生成3位数字): 您需要提供随机种子,否则每次重新启动服务器时都会得到相同的值 在这里,我使用resty.random.bytes(内部使用或来自OpenSSL)在nginx worker start上提供加密强伪随机种子 UPD:您应该使

早上好, 我试图在nginx上创建随机变量(我有openrestynginx+lua)。 下面是一个静态变量的示例:

set $teste 123;

那么是否可以将此静态变量随机化呢?

如果您使用的是openresty,您可以在lua的帮助下执行此操作,例如(生成3位数字):


您需要提供随机种子,否则每次重新启动服务器时都会得到相同的值

在这里,我使用
resty.random.bytes
(内部使用或来自OpenSSL)在nginx worker start上提供加密强伪随机种子

UPD:您应该使用
resty\u random.bytes(n,true)
来获得真正加密的强伪随机值。如果第二个参数为
true
,则将使用
RAND\u bytes
,而不是
RAND\u pseudo\u byte
。但在这种情况下,你必须处理熵池可能耗尽的问题。也就是说,
resty\u random。如果没有足够的随机性来确保不可预测的字节序列,字节(n,true)
可能返回
nil

http {

    init_worker_by_lua_block {
        local resty_random = require('resty.random')
        -- use random byte (0..255 int) as a seed
        local seed = string.byte(resty_random.bytes(1))
        math.randomseed(seed)
    }

    server {
        listen 8888;

        location = / {
            set_by_lua_block $random {
                return math.random(1, 100)
            }

            echo "random number: $random";

        }
    }
}

没有随机种子,产生的随机序列将是相同的,因此完全可预测。
http {

    init_worker_by_lua_block {
        local resty_random = require('resty.random')
        -- use random byte (0..255 int) as a seed
        local seed = string.byte(resty_random.bytes(1))
        math.randomseed(seed)
    }

    server {
        listen 8888;

        location = / {
            set_by_lua_block $random {
                return math.random(1, 100)
            }

            echo "random number: $random";

        }
    }
}