Todo:タイトルがあきらかにおかしい。
やりたいこと
http://192.168.0.1:5001/myapp ←これを
http://example.com/myprefix/myapp ←これで動かしたい。
myappのscriptを一切変更せずに。(url_forの挙動がよくわからなかったんですよ。)
プロキシー
イカ娘ちゃんは、言った。プロキシーを作ればいいじゃなイカ!ほんとは、flask.pocoo.org/snippets/35/の真似しただけです。
nginxの設定
location /myprefix/ {
include uwsgi_params;
if ($uri ~ ^/myprefix(.*)?) {
set $path_url $1;
}
uwsgi_param SCRIPT_NAME /myprefix;
uwsgi_pass 0.0.0.0:5001;
uwsgi_param X-Script-Name /myprefix;
uwsgi_param X-Scheme $scheme;
}
reverseProxy
class ReverseProxied(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
script_name = environ.get('X-Script-Name', '')
if script_name:
path_info = environ['PATH_INFO']
if path_info.startswith(script_name):
environ['PATH_INFO'] = path_info[len(script_name):]
scheme = environ.get('X-Scheme', '')
if scheme:
environ['wsgi.url_scheme'] = scheme
return self.app(environ, start_response)
done
nginxをreloadして、myappにReverseProxyを組み込んで、uwsgi起動しておしまい。headerとか、X-が何を意味するのかわかってないので、調べたいと思います(・∀・)v