On Thu, Mar 9, 2017 at 9:53 PM, JW <gav...@yahoo.com> wrote:
>
> It's been over a month since moving to Apache 2.4. It was fairly
> straightforward and required
> little code to be updated, most of it Apache config. Everything runs as it
> did before the update and I've
> had no problems. The one function that didn't 'work' is described below.
>
> This mod_perl server is behind a proxy on the same machine. Under Apache
> 2.2, $r->remote_ip()
> returned 127.0.0.1 and not the user's actual IP.  So, a
> PerlPostReadRequestHandler extracted the user's
> IP address from the X-Forwarded-For header and set it with $r->remote_ip(
> $ip ).
>
> In Apache 2.4 (and mod_perl now) $c->remote_ip is split into
> $r->useragent_ip and $c->client_ip:
> http://httpd.apache.org/docs/2.4/developer/new_api_2_4.html
> But, $r->useragent_ip (wrongly) gives me 127.0.0.1. Perhaps this'll be fixed
> at some point (unless
> I'm doing something wrong). So, for now, as above, the IP is extracted from
> X-Forwarded-For
> and set with $r->useragent_ip( $ip ).

Keep in mind you can't use r->useragent_ip until the request is created, e.g.
the create request hook is not a good place to try this (we actually had to
work around a crash related to this behavior in httpd's sources.) After the
read_request phase, this information will be finalized (provided that the
mod_remoteip config is correct).

It seems some code was expecting to read the useragent_ip in a very early
phase of connection handling, although the headers to populate it for the
request had not even been read off the wire :) So now, all attempts to read
this too-early will result in the c->client_ip values.

Here's when the action happens;
ap_hook_post_read_request(remoteip_modify_request, NULL, NULL, APR_HOOK_FIRST);

Reply via email to