python|centos flask gunicorn nginx实践 - pjpan/DataScience GitHub Wiki

整个运行的节奏:flask->gunicorn->nginx;

大概运行的逻辑和物流的逻辑很像,整个流程是:

  1. 我在网站上买了一个鼠标;
  2. 网站把鼠标发送到相应的物流公司;
  3. 物流公司的快递员把鼠标送到我的手中; 物流公司就是一个nginx,gunicorn就是快递员,他们负责调度,最后我可以得到我想要的东西;

根据这个流程,我们可以知道物流公司和快递员可以不同,可以外包也可以自营,有不同的输出单元;

为什么需要引入gunicorn或者nginx

因为如果你只有一个快递员的话,那么如果

定义flask的应用实例,用来进行任务分发,定义一个test_flask.py文件;

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    #from werkzeug.contrib.fixers import ProxyFix  # 经过测试,可以不需要用到这个东西
    #app.wsgi_app = ProxyFix(app.wsgi_app)
    app.run()

正常使用方法,通过命令行启动应用实例

python test_flask.py 

一些常用问题罗列

配置问题

nginx.conf的配置 gunicorn的启动 flask的写法

如何进行测试:

  1. 写一个test.py文件,看一下nginx和flask是否连通

502错误:

原因有两个:

1. nginx到上游的端口号之间不通; 2. 本身启动的flask的程序有问题;

Internal Server Error

一般情况下是,本身服务是有问题的,可以用log进行追溯发现问题在哪里。

如何查看log

  1. 通过log记录,nginx本身会记录error.log和access.log,可以对这两个文件进行查看;

[ERROR] Can't connect to ('127.0.0.1', 9001)

一般性出现这个错误的原因是端口号被占用了,你可以查看相应的端口号 [root@CNSZ445979 AddressSimilarity]# netstat -anlp | grep 9001