
Nginx + gunicorn + Flask 快速部署实现上线水平
发布日期:2021-05-10 07:23:09
浏览次数:12
分类:精选文章
本文共 2726 字,大约阅读时间需要 9 分钟。
使用Nginx、Gunicorn和Flask构建高效稳定的后端接口
在部署Django项目时,我曾遭遇过严重的内存泄漏问题,这迫使我放弃了Nginx + uwsgi的架构。经过仔细考虑,我决定采用Gunicorn作为应用服务器搭配Flask,这种组合在性能和可靠性上表现优异。
首先,我为项目安装所需的库:
pip3 install flask flask_restful gunicorn
接下来,我按照以下代码结构编写了一个基础的接口示例。这个例子结合了Flask和flask_restful
,满足了基本的HTTP接口需求。
from flask import Flask, request, jsonifyfrom flask_restful import reqparse, Resource, Apifrom functools import wrapsapp = Flask(__name__)api = Api(app)class Task1(Resource): @wraps(request) def get(self): parser = reqparse.RequestParser() parser.add_argument("url", type=str, location="args", required=False) parser.add_argument("type", type=int, location="args", required=False) parser.add_argument("id", type=str, location="args", required=False) params = parser.parse_args() if params['url'] == "/about": return jsonify({"message": "访问了关于我们页面"}) return jsonify({"message": "欢迎访问vulncn"})
如需更复杂的功能,可参考完整代码:
from flask import Flask, request, jsonifyfrom flask_restful import reqparse, Resource, Apifrom functools import wrapsapp = Flask(__name__)api = Api(app)class Task1 Resource): @wraps(request) def get(self): parser = reqparse.RequestParser() parser.add_argument("url", type=str, location="args", required=False) parser.add_argument("type", type=int, location="args", required=False) parser.add_argument("id", type=str, location="args", required=False) params = parser.parse_args() if params['action'] == 'fresh': return 'vuln.cn demo 1' else: return 'hello vuln.cn'class Task2 Resource): @wraps(request) def get(self): parser = reqparse.RequestParser() parser.add_argument("id", type=str, location="args", required=False) params = parser.parse_args() return 'vuln.cn demo 2'api.add_resource(Task1, '/demo1/')api.add_resource(Task2, '/demo2/')
启动Flask应用时可使用以下命令:
flask run -h 0.0.0.0 -p 5000 --reload
为了提高生产环境的稳定性和性能,接下来我配置了Gunicorn:
gunicorn -b 0.0.0.0:8000 --reload app:app --workers 4 --timeout 120
这里,--workers 4
设置了4个工作进程,--timeout 120
为每个请求设置120秒超时。
为了确保Gunicorn的高效运行,建议配合使用进程管理工具如syslog
或Prometheus
,并定期收集性能指标。
最后,为了提升静态资源的加载速度,我配置了Nginx作为反向代理:
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; access_log /var/log/nginx/access.log; } location /static { alias /path/to/your/static; autoindex on; }}
通过以上配置,我成功实现了一个高性能、稳定的接口系统。这不仅解决了原有的内存泄漏问题,还显著提升了系统的负载能力和可靠性。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月26日 00时41分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
c++之程序流程控制
2019-03-06
一位年轻而优秀的.NET开发者的成长点滴
2019-03-06
如何使用ABP进行软件开发(1) 基础概览
2019-03-06
第三周总结
2019-03-06
Spark学习之SparkStreaming
2019-03-06
AlwaysOn配置时在连接步骤时报错(35250)
2019-03-06
排序算法之总结
2019-03-06
微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
2019-03-06
Java基础知识回顾之六 ----- IO流
2019-03-06
React 函数式组件的 Ref 和子组件访问(useImperativeHandle)
2019-03-06
Python数据分析(二): Numpy技巧 (2/4)
2019-03-06
09 . Python3之常用模块
2019-03-06
Python学习笔记-StatsModels 统计回归(3)模型数据的准备
2019-03-06
Velocity.js初步
2019-03-06
Ubuntu16.04中php如何切换版本
2019-03-06
nginx上配置phpmyadmin
2019-03-06
HustOJ二次开发之修改数据库连接池
2019-03-06
SpringBoot之整合Dubbo
2019-03-06
Drools之关键字及错误信息
2019-03-06