Forum: NGINX Re: Handler invokation after upstream server being picked

5897ccfea0a62691f880792a3b417bbe?d=identicon&s=25 Jan Algermissen (Guest)
on 2013-11-12 15:29
(Received via mailing list)
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
A8108a0961c6087c43cda32c8616dcba?d=identicon&s=25 Maxim Dounin (Guest)
on 2013-11-12 16:38
(Received via mailing list)
Hello!

On Tue, Nov 12, 2013 at 03:28:48PM +0100, Jan Algermissen 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 Dounin
http://nginx.org/en/donation.html
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.