Hi all,
I want to read some remote values via HTTP into nginx config variables, just
once at nginx startup / reload time, and pass them as fastcgi_params into
PHP scripts. I control the remote system, so I'll know if it needs to
re-read and can send a HUP to nginx. I don't need it to happen every request
though, because the value won't change for long periods - but it will change
sometimes, and I don't want to have push more config out to multiple nginx
servers if I can avoid it.
Is there a way to do this that doesn't create problems?
Here's what I've tried so far.
This first one doesn't work, because the "API [is] disabled in the context
of set_by_lua*":
set_by_lua $config_variable "
local result = ngx.location.capture('http://url.to.fetch/')
return result
"
(Same with ngx.socket.*)
This next one works; it feels horrible to do this but if it was just once at
start-up, it might be OK - but this executes for every incoming request
(confirmed by using /bin/date as the 'command' and just hitting refresh):
set_by_lua $config_variable "
local command = "/usr/bin/curl http://url.to.fetch/"
local handle = io.popen(command)
local result = handle:read("*a")
handle:close()
return result
"
Same for this one, it executes for every request:
perl_set $config_variable '
sub {
$var = `/bin/date`;
return $var;
}
'
Is there a good way to do this, that only executes once, and doesn't have
horrible shell interactions?
Thanks very much for your help,
Igor
Posted at Nginx Forum: http://forum.nginx.org/read.php?2,253063,253063#msg-253063