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;


        location /test {
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



相关内容

    暂无相关文章