Flask 部署项目 Nginx + Gunicorn + Flask

Flask 部署项目 Nginx + Gunicorn + Flask

问题

一般服务是单机Gunicorn + Flask部署api接口即可,单机部署一般针对调用量,并发量要求不高的服务。由于目前单机部署不满足前端那边的并发请求,因此需要后端添加机器。问题来了,如何将多个后台ip及端口链接到一个接口,前端调用该接口之后,然后将请求分发给后台的多台机器上。这类的工具有很多,常用的是Nginx,Tengine等。这里选择常见的Nginx。

Flask API

# hello.py

from flask import Flask
app = Flask(__name__)

@app.route('/hello')
def hello():
    return '<h1>hello world</h1>'

if __name__ == '__main__':
    app.run(debug=True)

Gunicorn

Python WSGI HTTP Server: 实现了WSGI、uwsgi、http等协议,其作用就是把HTTP协议转化成语言支持的网络协议,用于处理客户端请求,并向客户端返回响应。这里的uwsgi则是uWSGI服务器的独占协议,与WSGI是两种不同的协议。

  • 安装
pip3 install gunicorn
  • 配置guncorn.py
  • 通过guncorn启动flask app
gunicorn hello:app

Nginx

安装
  • 查看Linux内核版本,Centos 6,7 / RedHat等
cat /proc/version
uname -a
  • 通过yum安装
sudo yum install nginx
  • 通过rpm安装
# centos 7
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm

rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm 
接入

假如后台有两台机器:

  • 168.xxx.xx.1:5000/hello;
  • 168.xxx.xx.2:5001/hello;

nginx/nginx.conf

编辑配置文件/etc/nginx,在http括号中添加

upstream flask{
    server 168.xxx.xx.1:5000 weight=2;
    server 168.xxx.xx.2:5001;
}

server {
    # 监听8080端口
    listen 8080;
    # 本机
    server_name localhost; 
    # 默认请求的url
    location /hello {
        #请求转发到gunicorn服务器
        proxy_pass http://flask; 
        #设置请求头,并将头信息传递给服务器端 
        proxy_set_header Host $host; 
    }
}

上述配置文件可以通过weight控制权重,比如一个机器性能好,另外一个机器性能差,可以将好性能的机器的权重调高一些;

  • 相关命令
sudo service nginx reload # 重新加载配置
sudo service nginx restart # 重启 nginx 服务
sudo nginx -s reload  # 热更新

下面直接访问 nginx安装的机器IP及端口号 127.0.0.1:8080/hello 就可以将请求分发给后台的两个机器,满足并发的需求。

日志文件可以在这里查看

 /var/log/nginx/access.log

参考

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值