Handler invokation after upstream server being picked

Maxim Dounin mdounin at mdounin.ru
Tue Nov 12 15:37:25 UTC 2013


Hello!

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

> 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?

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).

> 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.

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 Dounin
http://nginx.org/en/donation.html



More information about the nginx mailing list