Nginx,Flask,Gunicorn 502错误

时间:2014-10-06 07:00:31

标签: python nginx flask gunicorn

我仍然对Flask / Nginx / Gunicorn很新,因为这只是我使用该组合的第二个网站。我创建了一个基于Miguel Grinberg tutorial的网站,因此我的文件结构与本教程完全相同。

在我以前的Flask应用程序中,我的应用程序位于一个名为app.py的文件中,因此当我使用Gunicorn时,我只是称之为
gunicorn app:app

现在,我的新应用程序被拆分为多个文件,我使用文件run.py来启动应用程序,但我现在还不确定应该如何调用Gunicorn。我已经阅读了其他问题和教程,但它们还没有奏效。当我运行gunicorn run:app并尝试访问该网站时,我收到了502 Bad Gateway错误。

我认为我的问题比Nginx或Flask更多的是Gunicorn,因为如果我只输入./run.py,该网站就可以了。在任何情况下,我都包含了我的Nginx配置和下面的一些其他文件。非常感谢你的帮助!

档案:run.py

#!flask/bin/python
from app import app
from werkzeug.contrib.fixers import ProxyFix

app.wsgi_app = ProxyFix(app.wsgi_app)
app.run(debug = True, port=8001)

档案:app/views.py

from app import app

@app.route('/')
@app.route('/index')
def index():
    posts = Post.query.order_by(Post.id.desc()).all()
    return render_template('index.html', posts=posts)

档案:nginx.conf

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com/public_html/app;

    access_log /var/www/example.com/logs/access.log;
    error_log /var/www/example.com/logs/error.log;

    client_max_body_size 2M;

    location / {
        try_files $uri @gunicorn_proxy;
    }

    location @gunicorn_proxy {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8001;
    }
}

1 个答案:

答案 0 :(得分:2)

当gunicorn导入app.py时,正在运行的开发服务器正在运行。您只希望在直接执行文件时(例如python app.py)发生这种情况。

#!flask/bin/python
from app import app
from werkzeug.contrib.fixers import ProxyFix

app.wsgi_app = ProxyFix(app.wsgi_app)

if __name__ == '__main__':
    # You don't need to set the port here unless you don't want to use 5000 for development.
    app.run(debug=True)

完成此更改后,您应该可以使用gunicorn run:app运行该应用程序。请注意,gunicorn默认使用端口8000。如果您希望在备用端口(例如,8001)上运行,则需要使用gunicorn -b :8001 run:app指定。