Re: Question about Apache 2.4 and libapreq2 (Apache2::Request)

William A Rowe Jr <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <CACsi251miiABMJHKrNXSqifZwm4zuTABNNOoK_GW8NgUT1jFQA@mail.gmail.com>
On Thu, Mar 9, 2017 at 9:53 PM, JW <[email protected]> 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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.