Nginx随机变量

问题描述 投票:1回答:1

早上好,程序员们,我正在尝试在nginx上创建随机变量,(我有OpenResty nginx+lua),这是一个静态变量的例子。

set $teste 123;

那么是否可以把这个静态变量变成随机变量呢?

variables nginx lua webserver openresty
1个回答
-2
投票

如果你使用openresty,你可以借助lua来实现,例如(生成3位数)。

set_by_lua_block $teste { return string.format('%03d', math.random(1, 999)) }

2
投票

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

我在这里使用了 resty.random.bytes (内部使用 RAND_pseudo_bytesRAND_bytes 从OpenSSL)来提供 加密性强 在nginx Worker启动时使用伪随机种子。

UPD: 你应该使用 resty_random.bytes(n, true) 对于真正 加密性强 伪随机值。如果第二个参数是 true, RAND_bytes 将被用于代替 RAND_pseudo_byte. 但在这种情况下,你将不得不处理可能的熵池耗尽的问题。也就是.., resty_random.bytes(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";

        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.