Set request base based on X-Request-Base for reverse proxy setups
Perl
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib/Mojolicious/Plugin
t
.gitignore
.perltidyrc
.ship.conf
.travis.yml
Changes
Makefile.PL
README
README.pod
cpanfile

README.pod

NAME

Mojolicious::Plugin::RequestBase - Support setting base in frontend proxy

SYNOPSIS

Frontend proxy

The "X-Request-Base" header must be set in the frontend proxy.

# nxinx
proxy_set_header X-Request-Base "https://example.com/myapp";
# or
proxy_set_header X-Request-Base "/myapp";

Application

This plugin will read the "X-Request-Base" header.

# Mojolicious
$app->plugin("RequestBase");

# Mojolicious::Lite
plugin "RequestBase";

Controller

URL generating helpers, such as url_for will create the correct URL using the base URL from X-Request-Base.

Here are example with X-Request-Base set to https://example.com/myapp and a request sent to Request to https://example.com/myapp/foo:

# /myapp/foo
$c->url_for;

# https://example.com/myapp/foo
$c->url_for->to_abs;

# https://example.com/myapp/some/path
$c->url_for("/some/path")->to_abs;

# https://example.com/foo (Probably not what you want)
$c->req->url->to_abs;

Hooks

before_dispatch

In a before_dispatch the router has not yet started, so you need to pass in the request path to get the expected result:

hook before_dispatch => sub {
  my $c = shift;

  # https://example.com/myapp/foo
  $c->url_for($c->req->url->path)->to_abs;

  # https://example.com/foo (Probably not what you want)
  $c->url_for->to_abs;
};

DESCRIPTION

Simple plugin to support Request Base header. Just load it and set X-Request-Base in your Frontend Proxy. For instance, if you are using nginx you could use it like this:

proxy_set_header X-Request-Base 'https://example.com/myapp';

Note that you can also pass a relative URL to retain the original hostname provided by the proxy.

METHODS

Mojolicious::Plugin::RequestBase inherits all methods from Mojolicious::Plugin and implements the following new ones.

register

$plugin->register;

Register plugin in Mojolicious application.

SEE ALSO

Catalyst::TraitFor::Request::ProxyBase, Mojolicious, Mojolicious::Guides, http://mojolicio.us.

COPYRIGHT AND LICENSE

Copyright (C) 2011, Marcus Ramberg.

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.