2015-10-14 51 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