概念:
wsgi:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
Flask:python web微服务开发框架
gunicorn:在unix系统运行的wsgi服务器
nginx:http和反向代理服务器(客户端无法感知代理的存在)
总体架构:
在生产环境下,可以通过Nginx+gunicorn+Flask部署Web服务,从而达到高并发高稳定性的要求。
如果要部署多个APP,可以采用单个Nginx,多个gunicorn+Flask的方式来实现
(nginx收到客户端发来的请求,根据nginx中配置的路由,将其转发给WSGI)
nginx:”WSGI,找你的来了!”
(WSGI服务器根据WSGI协议解析请求,配置好环境变量,调用start_response方法呼叫flask框架)
WSGI服务器:”flask,快来接客,客户资料我都给你准备好了!”
(flask根据env环境变量,请求参数和路径找到对应处理函数,生成html)
flask:”!@#$%^……WSGI,html文档弄好了,拿去吧。”
(WSGI拿到html,再组装根据env变量组装成一个http响应,发送给nginx)
WSGI服务器:”nginx,刚才谁找我来着?回他个话,!@#$%^…..”
(nginx再将响应发送给客户端)
背景:
Flask内置的web服务器比较简单,只能单进程(worker)运行,性能不强,容易卡死,只适合开发环境。所以需要更强大的gunicorn来配合。nginx用于负载均衡和并发处理。保证内网安全:通常将反向代理作为访问地址,web服务器是内网。
ubuntu下安装nginx:
sudo apt-get install nginx
启动服务器:
/etc/init.d/nginx start
查看进程:
ps -ef|grep -i nginx
验证是否启动成功:
常见命令:
$ /etc/init.d/nginx start #启动
$ /etc/init.d/nginx stop #关闭
$ /etc/init.d/nginx restart #重启
$ killall nginx 杀死所有nginx# 如果是生产环境的话Nginx正在运行,就不要直接stop start 或者 restart 直接reload就行了
# 对线上影响最低
$ /etc/init.d/nginx reload
配置文件修改:
如果sudo apt-get install ngnix, 安装的默认位置是:/etc/nginx
修改路径在: /etc/nginx/sites-available/default 修改default即可
配置说明:
简单的配置:
两个server服务,监听端口不一样
$ nginx -t # 检查nginx语法问题
参考:
http://www.chenxm.cc/article/679.html ubuntu/linux nginx+Gunicorn+django 部署方法详细教程
https://dormousehole.readthedocs.io/en/latest/deploying/wsgi-standalone.html flask官网部署:独立 WSGI 容器
https://www.jianshu.com/p/192e62a5cdd2 Flask + Nginx + Gunicorn + Gevent部署
https://www.jianshu.com/p/dba83a473f12 Flask+gunicorn+nginx部署python (负载均衡)
https://www.jianshu.com/p/d71d6d793aaa Flask应用示例3 - 通过nginx+gunicorn+flask搭建web服务(参考总体架构)
https://www.cnblogs.com/xyou/p/8107872.html Flask + Gunicorn + Nginx 部署 (总结便于理解)