package Plack::Middleware::Proxy; use warnings; use strict; use parent 'Plack::Middleware'; use Plack::Util::Accessor qw( prefix scheme ); sub call { my ($self, $env) = @_; if ($env->{REMOTE_ADDR} ne '127.0.0.1') { $env->{SCRIPT_NAME} = $self->prefix; $env->{HTTP_X_FORWARDED_PROTO} = $self->scheme; } my $res = $self->app->($env); return Plack::Util::response_cb($res, sub { my $res = shift; if ($res->[0] == 302) { my %header = @{ $res->[1] }; my $prefix = $self->prefix; $header{Location} =~ s{^\Q$prefix/}{/$prefix/}; @{ $res->[1] } = %header; } return }); return $res } __PACKAGE__