2015-10-14 164 views
3

我有一個Flask應用程序在端口5000上運行。我的服務器管理員已配置nginx將其轉發到端口5001(對不起,如果我有錯誤的術語:Flask應用程序在端口5000上運行,但應用程序可在http://the_url:5001公開訪問)。Flask url_for忽略端口

直接在瀏覽器訪問工作全部路線,但使用url_for()任何重定向似乎導致該端口由URL被錯過的 - 即redirect(url_for('index'))重定向到http://the_url/,而不是http://the_url:5001/(其中@app.route("/")觸發功能index())。

如何確保Flask在重定向時添加正確的端口?如果我將默認端口更改爲5001,那麼nginx配置將無法正常工作,因爲它預計應用程序在端口5000上運行?

+0

的[?我在哪裏定義域在瓶URL \ _for()使用(可能的複製HTTP ://stackoverflow.com/questions/12162634/where-do-i-define-the-domain-to-be-used-by-url-for-in-flask) – ahmed

+0

閱讀評論的答案在http:// stackoverflow的.com /問題/ 12162634 /其中-DO-I-限定-的域至待使用逐URL換在燒瓶中。你應該從配置中刪除'http'部分。 – Jimilian

+0

我曾見過以前的答案,但設置'app.config [「SERVER_NAME」]'變量會停止網站運行...除非我做錯了這個? (我把它設置爲:'the_url:5001') – user2672537

回答

0

嘗試在nginx配置文件中添加這樣的內容。

location/{ 
      proxy_pass http://localhost:5000; 

      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header Host $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      proxy_set_header X-NginX-Proxy true; 
     } 

這樣你可以讓你的燒瓶應用程序在localhost:5000上運行。如果你正確設置你的server { listen 80; }配置(在配置的頂部),用戶應該能夠擊中端口80,並且它將重定向到內部5000端口。我的所有url_for()完美工作。

4

添加到您的Nginx的配置: proxy_set_header Host $http_host; proxy_set_header Host $host:5001

read here