Fetching HTTP value into config at start-up

igorclark nginx-forum at nginx.us
Thu Sep 4 05:07:26 UTC 2014

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")
        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,

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,253063,253063#msg-253063

More information about the nginx mailing list