我具有以下設置:燒瓶代理解決url_for
- 主服務器:
nginx的轉發"https://example.com/machine1/*" -> "http://machine1/*"
- MACHINE1:
ngnix + uwsgi +燒瓶中,在安裝/
,例如/foobar
。
這意味着,https://example.com/machine1/foobar
將達到MACHINE1爲/foobar
。 我有一個變量NGINX_MOUNT_URL
的安裝點/machine1
。
問題是,url_for
不能解決這個問題。
我試圖
app.config["APPLICATION_ROOT"] = NGINX_MOUNT_URL # = "/machine1"
但似乎只適用於餅乾網址。
有一個簡單的觀點:
@app.route("/foobar")
def web_foobar():
from flask import url_for
return "The URL for this page is {}".format(url_for("web_foobar"))
# end def
所以,瀏覽https://example.com/machine1/foobar
(主服務器)將獲得代理到http://machine1/foobar
(MACHINE1),這顯示The URL for this page is /foobar
。 我需要它是/machine1/foobar
,用於模板鏈接工作。
我試過https://stackoverflow.com/a/18967744/3423324提供的解決方案,但它總是以我不得不瀏覽https://example.com/machine1/machine1/foobar
甚至得到頁面/foobar
。
如何讓flask.url_for
知道APPLICATION_ROOT
?
這是一個古老的問題,但是在別人出現的機會之外,我實現這一目標的一種方式是在註冊服務模塊時傳遞'url_prefix ='/ machine1'(稍後重命名爲「register_module」到['register_blueprint'](https://github.com/pallets/flask/blob/71b7c4f5f89ea5e95dc7881797ca7d3a06b97e2f/flask/app.py#L955)似乎)。 – Bahrom
我稍後使用https://stackoverflow.com/a/47155246/3423324 – luckydonald