本文主要是介绍nginx+uwsgi 和nginx+gunicorn区别、如何部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[线上环境部署Django,nginx+uwsgi 和nginx+gunicorn,这两种方案,应该如何选择?]
大家是采用的何种部署方式?
第一种,高并发稳定一点
我们公司使用的是nginx+gunicorn,主要是方便。性能可以从其他方面优化。
随便吧
我们用的是nginx supervisor gunicorn
Instagram由uwsgi转到gunicorn,建议用gunicorn,配置简单方便。
推荐 nginx supervisor gunicorn
配置简单,运维方便。
用的nginx+gunicorn方式,uwsgi没用过所以没法对比,就gunicorn的感受也来讲已经很快了,nginx处理掉了几乎全部的静态文件请求,实际上需要gunicorn再来处理的请求已经很少了。
gunicorn可以用Python文件直接配置,试用起来比较舒服。
我觉得这两种相差不多,根据你们相关的运维人员和开发人员的熟悉程度来决定。
现在的网站其实大部分处理的都是静态文件请求,除了诸如秒杀活动等等特定的业务,一般业务的请求量并不是很大。
所以你可以根据:1、你们当前的业务与以后可能会增加的业务;2、你们的运维人员的技能
来决定,哪个更熟悉就选哪个
[如何使用Nginx和uWSGI或Gunicorn在Ubuntu上部署Flask Web应用]
我在很多的博客中都看过有关Flask
应用的部署,也有很多博主在开博后都记录了部署的教程,因为其中的坑可以说不少。一开始我在网上看到相比较与Ubuntu
,CentOS
因为更新少作为服务器的操作系统会更加稳定。所以在第一次购买云服务器时,我选择了CentOS
,后来由于CentOS
不同发行版的Nginx
缘故,我又换成了Ubuntu
的镜像
首先呢,我们先来了解下关于Web服务器与Web应用还有WSGI之间的联系
一、介绍
WSGI
(Web Server Gateway Interface),翻译为Python web
服务器网关接口,即Python
的Web
应用程序(如Flask
)和Web
服务器(如Nginx
)之间的一种通信协议。也就是说,如果让你的Web
应用在任何服务器上运行,就必须遵循这个协议。
那么实现WSGI
协议的web服务器有哪些呢?就比如uWSGI
与gunicorn
。两者都可以作为Web服务器。可能你在许多地方看到的都是采用Nginx
+ uWSGI
(或gunicorn
)的部署方式。实际上,直接通过uWSGI
或gunicorn
直接部署也是可以让外网访问的,那你可能会说,那要Nginx
何用?别急,那么接来下介绍另一个Web服务器——Nginx
Nginx
作为一个高性能Web服务器,具有负载均衡、拦截静态请求、高并发...等等许多功能,你可能要问了,这些功能和使用Nginx
+ WSGI
容器的部署方式有什么关系?
首先是负载均衡,如果你了解过OSI模型的话,其实负载均衡器就是该模型中4~7层交换机中的一种,它的作用是能够仅通过一个前端唯一的URL访问分发到后台的多个服务器,这对于并发量非常大的企业级Web站点非常有效。在实际应用中我们通常会让Nginx
监听(绑定)80
端口,通过多域名或者多个location分发到不同的后端应用。
其次是拦截静态请求,简单来说,Nginx
会拦截到静态请求(静态文件,如图片),并交给自己处理。而动态请求内容将会通过WSGI
容器交给Web
应用处理;
Nginx
还有其他很多的功能,这里便不一一介绍。那么前面说了,直接通过uWSGI
或gunicorn
也可以让外网访问到的,但是鉴于Nginx
具有高性能、高并发、静态文件缓存、及以上两点、甚至还可以做到限流与访问控制,所以选择Nginx
是很有必要的;
这里可以说明,如果你选择的架构是:Nginx + WSGI容器 + web应用,WSGI容器相当于一个中间件;如果选择的架构是uWSGI + web应用,WSGI容器则为一个web服务器
二、实际部署:
该篇部署的教程是在你已经购买好虚拟主机,并且已经搭建好开发环境的前提下进行的,如果你还没有搭建好开发环境,可以参考我写的文档:
阿里云Ubuntu云服务器上搭建Python和Flask的开发环境
普遍的部署方式都是通过让Nginx
绑定80
端口,并接受客户端的请求将动态内容的请求反向代理给运行在本地端口的uWSGI
或者Gunicorn
,所以既可以通过Nginx
+ uWSGI
也可以通过Nginx
+ Gunicorn
来部署Flask
应用,这篇教程中都将一一介绍这两种方法
当然采用不同的WSGI
容器,Nginx
中的配置也会有所不同
1. Nginx + uWSGI:
1.1 配置uWSGI:
我们现在虚拟环境下安装好uWSGI
:
这篇关于nginx+uwsgi 和nginx+gunicorn区别、如何部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!