根目录下的静态网站的Nginxconfiguration,子目录中的Flask应用程序

我想在我的根目录public_html有一个静态网站,然后Flask应用程序在他们自己的子目录(例如public_html /富)。 静态根目录function按预期。

我花了好几个小时编辑nginxconfiguration来让Flask应用程序工作,但是总是返回到同一个地方,即当我迁移到mysite / foo时,下面的代码总是返回'Bad Config'。 我希望它返回“Hello World!”

如果我改变了nginx的configuration,使得服务器的根目录在public_html / foo中,那么Flask应用程序按预期工作(即mysite.com返回“Hello World!”)。 在下面的configuration中,当我认为它应该指向mysite.com/foo时,Flask索引仍然指向mysite.com

在/ etc / nginx的/启用的站点 – / mysite的

upstream frontends { # gunicorn server 127.0.0.1:18000; } server { listen 80; server_name www.mysite.com; rewrite ^/(.*) http://mysite.com$1 permanent; } server { listen 80; server_name mysite.com; server_name_in_redirect off; root /home/ubuntu/public_html/mysite; access_log /home/ubuntu/logs/mysite/access.log; error_log /home/ubuntu/logs/mysite/error.log; location / { index index.html; } location /foo { try_files $uri @foo; } location @foo { proxy_pass http://frontends; break; } } 

/home/ubuntu/public_html/mysite/foo/foo.py

 from flask import Flask from flask import render_template app = Flask(__name__) @app.route('/') def index(): return 'Hello World!' @app.route('/foo') def test(): return 'Bad config' @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 if __name__ == '__main__': app.run() 

/home/ubuntu/public_html/mysite/foo/deploy.py

 workers = 2 bind = '127.0.0.1:18000' proc_name = 'foo_gunicorn' pidfile = 'foo.pid' 

使用gunicorn -c deploy.py foo:app启动Flask

更新

添加rewrite /foo/(.*) /$1 break; 到nginx location /foo块使得mysite / foo返回'Hello World',但是它的所有链接(例如从样板到样板)仍然指向站点根目录(例如mysite / static / style.css而不是mysite /foo/static/style.css)

从mitsuhiko(Flask lead dev)得到了答案: http ://flask.pocoo.org/snippets/35/

您需要在Flask应用程序中定义一个ReverseProxied类,并将多个proxy-set-header行添加到nginx配置中的location /foo块。