2016-12-07 123 views
3

我具有以下設置:燒瓶代理解決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/foobarMACHINE1),這顯示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

+0

這是一個古老的問題,但是在別人出現的機會之外,我實現這一目標的一種方式是在註冊服務模塊時傳遞'url_prefix ='/ machine1'(稍後重命名爲「register_module」到['register_blueprint'](https://github.com/pallets/flask/blob/71b7c4f5f89ea5e95dc7881797ca7d3a06b97e2f/flask/app.py#L955)似乎)。 – Bahrom

+0

我稍後使用https://stackoverflow.com/a/47155246/3423324 – luckydonald

回答