The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::Middleware::ForwardedHeaders - Use headers from reverse proxy

SYNOPSIS

    use Plack::Builder;
    builder {
        enable 'ForwardedHeaders';
        $app;
    };

DESCRIPTION

Uses forwarded headers to determine remote IP address, HTTPS status, and requested host. It will adjust the REMOTE_ADDR, HTTP_HOST, and psgi.url_scheme environment items accordingly.

WARNING: Enabling this middleware without a reverse proxy or a properly configured list of trusted proxies will allow users to spoof their IP address.

CONFIGURATION

trusted

An IP address or an array reference of IP addresses of trusted proxies. If set, the forwarded headers will only be used if the request comes from one of the addresses listed as trusted.

use_host

If set, forwarded headers will be used to determine the host being requested. Defaults to false.

use_scheme

If set, forwarded headers will be used to determine the URL scheme. Defaults to true.

use_address

If set, forwarded headers will be used to determine the client address. Defaults to true.

resolve_host

If set, the hostname of the client will be resolved and saved in the REMOTE_HOST. Defaults to false.

HTTP HEADERS

Host Headers

The folling headers are used to determine the original requested host for a forwarded request.

X-Forwarded-Host

Set by Apache 2.2

Remote Address Headers

The folling headers are used to determine the remote IP address for a forwarded request.

X-Forwarded-For

The de-facto standard for finding the originating client IP address. Set by Squid, Apache 2.2, and many others.

X-Real-IP

Used by nginx.

Scheme Headers

The folling headers are used to determine the forwarded scheme:

X-Forwarded-Proto
X-Forwarded-SSL
X-Forwarded-Scheme
Front-End-HTTPS

Used by Microsoft Internet Security and Acceleration Server

SEE ALSO

http://en.wikipedia.org/wiki/X-Forwarded-For

AUTHOR

Graham Knop <haarg@haarg.org>

LICENSE

Copyright (c) 2010, Graham Knop

This library is free software; you can redistribute it and/or modify it under the same terms as Perl 5.10.0. For more details, see the full text of the licenses in the directory LICENSES.