Mojolicious::Plugin::ReverseProxy
package ProxyFun;
use Mojo::Base 'Mojolicious';
sub startup {
my $app = shift;
$app->plugin('Mojolicious::Plugin::ReverseProxy',{
# mandatory
destination_url => 'http://www.oetiker.ch',
# optional
routes => $app->routes, # default
mount_point => '/', # default
req_processor => sub {
my ($c,$req) = @_;
# do something to the request object prior
# to passing it on to the destination_url
# maybe fix the Origin or Referer headers
for (qw(Origin Referer)){
my $value = $req->headers->header($_) or next;
if ( $value =~ s{http://www.oetiker.ch}{http://localhost:3000} ){
$req->headers->header($_,$value);
}
}
},
res_processor => sub {
my ($c,$res) = @_;
# do something to the response object prior
# to passing it on to the client
# maybe fixing the location header
# or absolute URLs in the body
if (my $location = $res->headers->location){
if ( $location =~ s{http://www.oetiker.ch}{http://localhost:3000} ){
$res->headers->location($location);
}
}
if ($res->headers->content_type =~ m{text/html} and my $body = $res->body){
if ( $body =~ s{http://www.oetiker.ch}{http://localhost:3000}g){
$res->body($body);
$res->headers->content_length(length($body));
}
}
},
}
}
DESCRIPTION
The Mojolicious::Plugin::ReverseProxy lets your register a proxy route. The module is rather mindless in the sense that it does not try to help you with fixing headers or content to actually work with the proxy, apart from the Host
header.
What makes this Plugin really useful, is that you can supply a req_processor
and a res_processor
callback which will act on the request prior to passing it on to the destination and on the response prior to returning it to the client respectively.
The plugin takes the following options:
- destination_url
-
Where should the proxy connect to
destination_url => 'http://www.oetiker.ch'
- routes (defaults to app->routes)
-
the routes object to use for adding the proxy route
- mount_point (defaults to /)
-
under which path should the proxy appear.
- req_processor
-
Can be pointed to an anonymous subroutine which is called prior to handing control over to the user agent.
If you render the page in the
req_processor callback
, the page will be returned immediately without calling thedestination_url
- res_processor
-
Can be pointed to an anonymous subroutine which is called prior to rendering the response.
AUTHOR
Tobias Oetiker, <tobi@oetiker.ch>
COPYRIGHT
Copyright OETIKER+PARTNER AG 2014
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 162:
You forgot a '=back' before '=head1'