Mercurial > farol > farol
annotate farol/proxy.py @ 3:3478e20885fd 0.1
Add a ReverseProxy and fix the cache path everywhere
author | Benoît Allard <benoit.allard@greenbone.net> |
---|---|
date | Wed, 24 Sep 2014 17:46:44 +0200 |
parents | |
children |
rev | line source |
---|---|
3
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
1 # Code from http://flask.pocoo.org/snippets/35/ |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
2 # |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
3 # This snippet by Peter Hansen can be used freely for anything you like. |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
4 # Consider it public domain. |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
5 |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
6 |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
7 class ReverseProxied(object): |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
8 '''Wrap the application in this middleware and configure the |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
9 front-end server to add these headers, to let you quietly bind |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
10 this to a URL other than / and to an HTTP scheme that is |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
11 different than what is used locally. |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
12 |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
13 In nginx: |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
14 location /myprefix { |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
15 proxy_pass http://192.168.0.1:5001; |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
16 proxy_set_header Host $host; |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
17 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
18 proxy_set_header X-Scheme $scheme; |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
19 proxy_set_header X-Script-Name /myprefix; |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
20 } |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
21 |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
22 :param app: the WSGI application |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
23 ''' |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
24 def __init__(self, app): |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
25 self.app = app |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
26 |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
27 def __call__(self, environ, start_response): |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
28 script_name = environ.get('HTTP_X_SCRIPT_NAME', '') |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
29 if script_name: |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
30 environ['SCRIPT_NAME'] = script_name |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
31 path_info = environ['PATH_INFO'] |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
32 if path_info.startswith(script_name): |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
33 environ['PATH_INFO'] = path_info[len(script_name):] |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
34 |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
35 scheme = environ.get('HTTP_X_SCHEME', '') |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
36 if scheme: |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
37 environ['wsgi.url_scheme'] = scheme |
3478e20885fd
Add a ReverseProxy and fix the cache path everywhere
Benoît Allard <benoit.allard@greenbone.net>
parents:
diff
changeset
|
38 return self.app(environ, start_response) |