Variables Nginx随机变量
早上好, 我试图在nginx上创建随机变量(我有openrestynginx+lua)。 下面是一个静态变量的示例: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:您应该使
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";
}
}
}