Plack::App::Proxy3pm
Proxy requests
Usage
use Plack::Builder;# proxy all requests for /static to 127.0.0.1:80builder {mount "/static" => Plack::App::Proxy->new(remote => "http://127.0.0.1:80")->to_app;};# Call from other appmy $proxy = Plack::App::Proxy->new->to_app;my $app = sub {my $env = shift;...$env->{'plack.proxy.url'} = $url;$proxy->($env);};
Overview
Plack::App::Proxy is a middleware-aware proxy application for Plack.
Options
- remote
-
Plack::App::Proxy->new(remote => 'http://perl.org')->to_app;Specifies the base remote URL to proxy requests to.
builder {mount "/example",Plack::App::Proxy->new(remote => 'http://example.com/app/foo')->to_app;};This proxies incoming requests for
"/example/bar"proxied to"http://example.com/app/foo/bar".
- preserve_host_header
-
Preserves the original Host header, which is useful when you do reverse proxying to the internal hosts.
- backend
-
The HTTP backend to use. This dist comes with
"LWP"and"AnyEvent::HTTP"backends."AnyEvent::HTTP"is the default if no backend is specified.
- options
-
The options for the HTTP backend instance.
Middleware configurations
This application is just like a normal PSGI application and is middleware aware, which means you can modify proxy requests (and responses) using Plack middleware stack.
It also supports the following special environment variables:
plack.proxy.url
|
Overrides the proxy request URL. |
|---|---|
plack.proxy.remote
|
Overrides the base URL path to proxy to. |
For example, the following builder code allows you to proxy all GET requests for .png paths to the lolcat image (yes, a silly example) but proxies to the internal host otherwise.
my $mw = sub {my $app = shift;sub {my $env = shift;if ($env->{REQUEST_METHOD} eq 'GET' && $env->{PATH_INFO} =~ /\.png$/) {$env->{'plack.proxy.url'} = 'http://lolcat.example.com/lol.png';}$app->($env);};};use Plack::Builder;builder {enable $mw;Plack::App::Proxy->new(remote => 'http://10.0.0.1:8080')->to_app;};
Releases
6 releases since Debian 8 (Jessie); the text changed 1 time.