[Catalyst] X-Forwarded-Path

Brad Bowman list at bereft.net
Sun Nov 11 23:29:34 GMT 2012


On 11/10/12 00:34, Stephen Shorrock wrote:
> I'm trying to run an application behind a frontend proxy where the
> path at the front end is not route:
>
> config on frontend.mydomain.ac.uk
>
> <Location /CUFSE>
>          RewriteEngine On
>          RewriteCond %{REMOTE_USER} (.+)
>          RewriteRule . - [E=RU:%1]
>          RequestHeader set REMOTE_USER %{RU}e
>          RequestHeader set X-Forwarded-Path '/CUFSE'
>          ProxyPass http://backend.mydomain.ac.uk:5000/
>          ProxyPassReverse http://backend.mydomain.ac.uk:5000/
> </Location>
>
> On the backend my application is run via starman and has contained in
> its configuration:
>
> __PACKAGE__->config(
>      name => 'CUFSE',
>      using_frontend_proxy => 1,
>      ...
>
> I would there for expect that when calling $c->uri_for('some/path') I would get:
>
> http://frontend.mydomain.ac.uk/CUFSE/some/path
>
> but the frontend portion of the path is not there instead I only have:
>
> http://frontend.mydomain.ac.uk/some/path
>
> I've attempted to grep all Perl modules for /X[_-]Forwarded[_-]Path/i
> but with no joy.
[..]
> (source of method:
> http://wiki.catalystframework.org/wiki/wikicookbook/frontendproxy)
>

A belated plug for Plack::Middleware::ReverseProxyPath (although it
sounds like your problem is solved).

http://search.cpan.org/~bowmanbs/Plack-Middleware-ReverseProxyPath-0.03/lib/Plack/Middleware/ReverseProxyPath.pm

I've not tried using this with Catalyst, but it's PSGI middleware so
should be fine.

I use the following header names:

X-Forwarded-Script-Name
     The front-end prefix being forwarded FROM. This is the replacement.
     The value of SCRIPT_NAME on the front-end.

X-Traversal-Path
     The back-end prefix being forwarded TO. This is to be replaced.
     This is the part of the back-end URI that is just plumbing which
     should be hidden from the app.

X-Forwarded-Script-Name follows the X-Forwarded-* pattern established
by other headers (the SCRIPT_NAME on the front end) and matches PSGI names.
X-Traversal-Path was inspired by a similar Python/wsgi middleware.

However, I'd like to use the defacto standard names, if they exist.
Is X-Forwarded-Path in common use?

I might also add support for X-Request-Base and a combined middleware
similar to Catalyst::TraitFor::Request::ProxyBase, thanks for the
inspiration.

Brad





More information about the Catalyst mailing list