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应用的部署,也有很多博主在开博后都记录了部署的教程,因为其中的坑可以说不少。一开始我在网上看到相比较与UbuntuCentOS因为更新少作为服务器的操作系统会更加稳定。所以在第一次购买云服务器时,我选择了CentOS,后来由于CentOS不同发行版的Nginx缘故,我又换成了Ubuntu的镜像

首先呢,我们先来了解下关于Web服务器与Web应用还有WSGI之间的联系

一、介绍

WSGI(Web Server Gateway Interface),翻译为Python web服务器网关接口,即PythonWeb应用程序(如Flask)和Web服务器(如Nginx)之间的一种通信协议。也就是说,如果让你的Web应用在任何服务器上运行,就必须遵循这个协议。

那么实现WSGI协议的web服务器有哪些呢?就比如uWSGIgunicorn。两者都可以作为Web服务器。可能你在许多地方看到的都是采用Nginx + uWSGI(或gunicorn)的部署方式。实际上,直接通过uWSGIgunicorn直接部署也是可以让外网访问的,那你可能会说,那要Nginx何用?别急,那么接来下介绍另一个Web服务器——Nginx

Nginx作为一个高性能Web服务器,具有负载均衡、拦截静态请求、高并发...等等许多功能,你可能要问了,这些功能和使用Nginx + WSGI容器的部署方式有什么关系?

首先是负载均衡,如果你了解过OSI模型的话,其实负载均衡器就是该模型中4~7层交换机中的一种,它的作用是能够仅通过一个前端唯一的URL访问分发到后台的多个服务器,这对于并发量非常大的企业级Web站点非常有效。在实际应用中我们通常会让Nginx监听(绑定)80端口,通过多域名或者多个location分发到不同的后端应用。

其次是拦截静态请求,简单来说,Nginx会拦截到静态请求(静态文件,如图片),并交给自己处理。而动态请求内容将会通过WSGI容器交给Web应用处理;

Nginx还有其他很多的功能,这里便不一一介绍。那么前面说了,直接通过uWSGIgunicorn也可以让外网访问到的,但是鉴于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


 

你可能感兴趣的:(Python语法相关,玩转Linux)