Plack-Middleware-RealIP

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

NAME
    Plack::Middleware::RealIP - Override client IP with header value
    provided by proxy/load balancer

SYNOPSIS
      enable 'Plack::Middleware::RealIP',
          header => 'X-Forwarded-For',
          trusted_proxy => [qw(192.168.1.0/24 192.168.2.1)];

DESCRIPTION
    Plack::Middleware::RealIP is loose port of the Apache module
    mod_remoteip. It overrides "REMOTE_ADDR" with the IP address advertised
    in the request header configured with "header".

    When multiple, comma delimited IP addresses are listed in the header
    value, they are processed from right to left. The first untrusted IP
    address found, based on "trusted_proxy", stops the processing and is set

lib/Plack/Middleware/RealIP.pm  view on Meta::CPAN


1;

=head1 NAME

Plack::Middleware::RealIP - Override client IP with header value provided by proxy/load balancer

=head1 SYNOPSIS

  enable 'Plack::Middleware::RealIP',
      header => 'X-Forwarded-For',
      trusted_proxy => [qw(192.168.1.0/24 192.168.2.1)];

=head1 DESCRIPTION

Plack::Middleware::RealIP is loose port of the Apache module
mod_remoteip. It overrides C<REMOTE_ADDR> with the IP address advertised
in the request header configured with C<header>.

When multiple, comma delimited IP addresses are listed in the header
value, they are processed from right to left. The first untrusted IP

t/realip.t  view on Meta::CPAN


    test_psgi $app, sub {
        my $cb = shift;
        my $res = $cb->(GET '/', %{ $proxy_header });
        is $res->content, $expected;
    };
}

run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Client-IP',     '127.0.0.1', '1.2.3.4|9.8.7.6');
run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Client-IP',     '1.2.3.4', '9.8.7.6|');
run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Forwarded-For', '1.2.3.4', '1.2.3.4|');
run('1.2.3.4',   {'X-Client-IP' => '9.8.7.6'},                'X-Forwarded-For', '127.0.0.1', '1.2.3.4|');
run('127.0.0.1', {'X-Forwarded-For' => '9.8.7.6'},            'X-Forwarded-For', '127.0.0.1', '9.8.7.6|');
run('127.0.0.1', {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', '127.0.0.1', '9.8.7.6|10.55.1.2');
run('127.0.0.1', {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16'], '10.55.1.2|');
run('1.2.3.4',   {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16'], '1.2.3.4|10.55.1.2, 9.8.7.6');
run('1.2.3.4',   {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16', '10.55/16'], '1.2.3.4|10.55.1.2, 9.8.7.6');
run('1.2.3.4',   {'X-Forwarded-For' => '10.55.1.2, 9.8.7.6'}, 'X-Forwarded-For', ['127.0.0.1', '9.8/16', '10.55/16', '1.2.3.4'], '1.2.3.4|');

done_testing;



( run in 0.440 second using v1.01-cache-2.11-cpan-4e96b696675 )