Re: Handler invokation after upstream server being picked

Maxim,

a while ago you replied to my question below.

Since yesterday I am trying to get hold of the proxy_host variable set
by the proxy module but without success, maybe you can help a little
with the code.

From the source I understood that the proxy module sets the proxy_host
var during NGINX startup. I guess, that happens on a per-location basis,
depending on encountering a proxy_pass directive.

Correct?

I should then be able to access the proxy_host variable during the
authentication phase (this is where my module sits).

Correct?

To get hold of it, I try to find the index of the proxy_host var in my
location config merge handler:

var.data = (unsigned char*)"proxy_host";
var.len = 10;
child->proxy_host_var_index = ngx_http_get_variable_index(cf, &var);

if (child->proxy_host_var_index == NGX_ERROR) {  /* NOT FOUND, TRY 

TO INHERIT */
child->proxy_host_var_index = parent->proxy_host_var_index;
return NGX_CONF_OK;
}

/* FOUND - This loca config has its own proxy_pass configuration */

In my handler, I then do this:

ngx_http_variable_value_t *value;

value = ngx_http_get_indexed_variable(r,
conf->proxy_host_var_index);

Does that make sense? I does not work for me, unfortunately.

(The log module does see the proxy_host variable and logs the expected
value for it.

Jan

Hello!

On Tue, Nov 12, 2013 at 03:28:48PM +0100, Jan A. wrote:

per-location basis, depending on encountering a proxy_pass
directive.

Correct?

Not exactly. Variables only exists during requests processing.
That is, the $proxy_host variable isn’t set during nginx startup,
but instead its value becomes known when proxy module starts
working with a request.

I should then be able to access the proxy_host variable during
the authentication phase (this is where my module sits).

Correct?

No, see above. The $proxy_host variable value is not known till
proxy started to work (and, if variables are used in proxy_pass,
evaluated its parameter).

}

(The log module does see the proxy_host variable and logs the expected value for
it.

See above for explanation why it doesn’t work for you. Looking
into src/http/modules/ngx_http_proxy_module.c might be helpful,
too.


Maxim D.
http://nginx.org/en/donation.html