NAME Catalyst::TraitFor::Request::ProxyBase - Replace request base with value passed by HTTP proxy SYNOPSIS package MyApp; use Moose; use namespace::autoclean; use Catalyst; use CatalystX::RoleApplicator; extends 'Catalyst'; __PACKAGE__->apply_request_class_roles(qw/ Catalyst::TraitFor::Request::ProxyBase /); __PACKAGE__->setup; DESCRIPTION This module is a Moose::Role which allows you more flexibility in your application's deployment configurations when deployed behind a proxy. The problem is that there is no standard way for a proxy to tell a backend server what the original URI for the request was, or if the request was initially SSL. (Yes, I do know about "X-Forwarded-Host", but they don't do enough) This creates an issue for someone wanting to deploy the same cluster of application servers behind various URI endpoints. Using this module, the request base ("$c->req->base") is replaced with the contents of the "X-Request-Base" header, which is expected to be a full URI, for example: http://example.com https://example.com http://other.example.com:81/foo/bar/yourapp This value will then be used as the base for uris constructed by "$c->uri_for". In addition the request uri ("$c->req->uri") will reflect the scheme and path specifed in the header. REQUIRED METHODS base secure WRAPPED METHODS base secure APACHE SETUP On the frontend Proxy Apache, you would want to enable a Virtualhost config somewhat like this. The backend apache config stays unchanged. ProxyRequests Off # You must have mod_headers enabled for that # RequestHeader set X-Request-Base /preview RequestHeader set X-Request-Base http://www.example.com/preview ProxyPass /preview http://my.vpn.host/ ProxyPassReverse /preview http://my.vpn.host/ BUGS Probably. Patches welcome, please fork from: http://github.com/bobtfish/catalyst-traitfor-request-proxybase and send a pull request. AUTHOR Tomas Doran (t0m) "" CONTRIBUTORS Klaus Ita (koki) "" COPYRIGHT This module is Copyright (c) 2009 Tomas Doran and is licensed under the same terms as perl itself.