Handler invokation after upstream server being picked
Jan Algermissen
jan.algermissen at nordsc.com
Tue Nov 12 14:28:48 UTC 2013
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 Fri, Oct 25, 2013 at 12:30:34PM +0200, Jan Algermissen wrote:
>
>> Hi,
>>
>> I am writing a module that needs to add/change the HTTP
>> Authorization server for an upstream request.
>>
>> Since I am using a signature based authentication scheme where
>> the signature base string includes the request host and port the
>> header can only be added *after* the upstream module has
>> determined which server to send the request to (e.g. after
>> applying round-robin).
>>
>> Is it possible to hook my module into that 'phase' and if so -
>> what is the preferred way to do that?
>>
>> I saw that I at least can access the target host and port set by
>> the proxy module by reading the proxy module variables. However,
>> that (of course) does only give the server group name to be used
>> by the upstream module in the next step.
>
> A request to an upstream is created once, before a particular
> server is known, and the same request is used for requests to all
> upstream servers. That is, what you are trying to do isn't
> something currently possible.
>
> --
> Maxim Dounin
More information about the nginx
mailing list