simple reverse proxy for django.
Python
Latest commit eb86f95 Jun 11, 2013 @benoitc mark the project as unmaintained
Project is currently unmaintained by me, feel free to contact me
Failed to load latest commit information.
example/testproxy
revproxy Remove is_hop_by_hop import, since it's gone in Django 1.4 and has ne… Jul 18, 2012
.gitignore
LICENSE initial commit. Mostly work. Need to fix issue to allows the proxy to be Oct 16, 2010
MANIFEST.in Don't import settings until it's needed, so we can install dj-revproxy. Oct 16, 2010
NOTICE initial commit. Mostly work. Need to fix issue to allows the proxy to be Oct 16, 2010
README.rst
requirements.txt
setup.py increase restkit version Feb 25, 2011

README.rst

Status: UNMAINTAINED

Contact me if you want to take the lead.

dj-revproxy

Django reverse proxy. Allows you to proxy any website behind a prefix.

Requirements

Installation

Install from sources:

$ python setup.py install

Or from Pypi:

$ easy_install -U dj-revproxy

Configuration

Add revproxy to the list of applications:

INSTALLED_APPS = (
    ...
    'revproxy'
)

Usage

Since 0.2, there is 2 ways to use dj-revproxy.

1. Generic view

You can use proxy_request function to proxy any url. You can use it in your code:

proxy_request(request, "http://example.com")

This code will proxy current request to http://example.com domain. This function can take 5 parameters:

  • destination: string, the proxied url. Required
  • path: string, If no path is given it will try to detect the url using the prefix if it's given. If not full request.path will be used in finl destination url.
  • prefix: string, the prrefix behind we proxy the path headers: dict, custom HTTP headers
  • no_redirect: boolean, False by default, do not redirect to "/" if no path is given
  • decompress: boolean, False by default. If true the proxy will decompress the source body if it's gzip encoded.

It return an instance of django.http.HttpResponse. You can use it directly in your urls.py (which is the eaiest way to use). Ex:

(r'^gunicorn(?P<path>.*)', "revproxy.proxy.proxy_request", {
    "destination": "http://gunicorn.org"
}),

2. Configure multiple proxy behind one generic prefix

To configure a proxy add a tupple to the REVPROXY_SETTINGS list:

REVPROXY_SETTINGS = [
    ("_google", "http://google.com"),
    ("_friendpaste", "http://www.friendpaste.com"),
    ("_couchdb", "http://127.0.0.1:5984"),
]

Then configure your proxied urls automatically do something like this in urls.py:

from django.conf.urls.defaults import *

import revproxy.proxy

urlpatterns = patterns('',
    ...
    (r'^proxy/', include(proxy.site_proxy.urls)),
)

Which will allow you to proxy Google on the url:

http://127.0.0.1:8000/proxy/_google

or even:

('^proxy/(?P<prefix>[^\/]*)(.*)', "proxy.site_proxy"),