nginx(openresty)+uwsgi+flask,nginxopenresty
nginx(openresty)+uwsgi+flask,nginxopenresty
生产环境发布flask的web服务为了应对高并发一般需要采用nginx+uwsgi+flask的模式。
一、flask
基于 werkzeug实现wsgi接口、使用jinja2作为模版引擎的小型web框架,此框架不包括任何组件如redis、sqlachemy、celery等都需要自己手动安装。
app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/test')
def index():
return "<span style='color:red'>I am app 1</span>"
app.run()
写完此demo后,其实已经具备发布一个web服务的条件。
执行启动命令(flask默认启动5000的端口): python app.py
测试:curl http://localhost:5050/test
二、uwsgi
摘自百度百科:
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
安装:
pip install uwsgi
用uwsgi作为接入层启动flask应用,启动命令:
uwsgi --http 0.0.0.0:9090 --wsgi-file app.py --callable app --processes 4 --threads 2
注意:
此时需要吧app.py中的app.run()删掉,否则会优先选择此方式启动flask,那么uwsgi就不会生效。
app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/test')
def index():
return "<span style='color:red'>I am app 1</span>"
测试:curl http://localhost:9090/test
三、openresty
安装见另一个博文 https://blog.csdn.net/zt3032/article/details/78657550
此时需要修改nginx的配置文件:
server {
listen 8080;
server_name localhost;
include uwsgi_params;
uwsgi_pass 0.0.0.0:9090;
}
}
启动openresyt
注意:此时uwsgi启动的时候需要以socket协议启动,启动命令如下:
uwsgi --socket 0.0.0.0:9090 --wsgi-file app.py --callable app --processes 4 --threads 2
测试:curl http://localhost:9090/test
四、uwsgi启动(配置文件)
uwsgi的启动我们可以把命令行的参数都放在ini文件中,如myini:
[uwsgi]
socket = 127.0.0.1:9090 #监听端口
chdir = /opt/myopng/myflask #flask文件路径
wsgi-file = /opt/myopng/myflask/app.py #flask文件
callable = app #flask定义的Flask(__name__)
processes = 4
threads = 2
启动命令:
uwsgi myini
测试:
curl http://localhost:9090/test
评论暂时关闭