python|centos flask gunicorn nginx实践 - pjpan/DataScience GitHub Wiki
整个运行的节奏:flask->gunicorn->nginx;
大概运行的逻辑和物流的逻辑很像,整个流程是:
- 我在网站上买了一个鼠标;
- 网站把鼠标发送到相应的物流公司;
- 物流公司的快递员把鼠标送到我的手中; 物流公司就是一个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的写法
如何进行测试:
- 写一个test.py文件,看一下nginx和flask是否连通
502错误:
原因有两个:
1. nginx到上游的端口号之间不通; 2. 本身启动的flask的程序有问题;
Internal Server Error
一般情况下是,本身服务是有问题的,可以用log进行追溯发现问题在哪里。
如何查看log
- 通过log记录,nginx本身会记录error.log和access.log,可以对这两个文件进行查看;
[ERROR] Can't connect to ('127.0.0.1', 9001)
一般性出现这个错误的原因是端口号被占用了,你可以查看相应的端口号 [root@CNSZ445979 AddressSimilarity]# netstat -anlp | grep 9001