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