【部署】了解nginx+gunicorn+django架构

本文介绍了为何选择Nginx+Gunicorn+Django架构来部署PythonWeb应用,详细讲解了WSGI协议、Gunicorn与uWSGI的区别,以及Nginx的工作原理。Nginx作为反向代理服务器,提供负载均衡和静态文件处理,Gunicorn作为WSGI服务器管理应用进程,两者结合能有效提高性能和稳定性。此外,还讨论了Django项目的常见结构和部署步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


【相关的基础知识】
《【架构】了解常见的软件架构》
《【架构】分布式系统及相关技术栈初了解》 (*重要)


1)为什么是nginx+gunicorn+django架构?

我们在部署 flask、django 等 python web 框架(站点)时,通常有两种选择方式,nginx+django+uwsgi或者django+nginx+gunicorn。(在linux下通常都使用nginx,因为速度快,还经常做代理服务器,功能强大。)

网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢?

1、首先了解一下相关概念:

  • WSGI:

    这里必须要知道的一个概念,WSGI,web service gateway interface(网络服务网关接口)。它不是 web server,也不是 web application,它是架在 server 和 application 之间的一种协议和规范

    在这里插入图片描述

    • WSGI 的目的就是解耦 web server 和 web application,它包括两个部分,server 和 application,server 用来接收 web 客户端的请求,application 用来接收 server 传来的请求,然后传给 web server。
    • 关于WSGI的详细说明可参考:https://zhuanlan.zhihu.com/p/95942024

此协议是Python语言的专利,它定义了一组在Web服务宿主程序和HTTP响应代理程序之间通信的普遍适用的接口。

  • 它的产生是因为Python程序员注意到,对于Web框架和Web宿主服务器程序间,有严重的耦合性,比如说,某些框架是针对Apache的mod_python设计的。于是,WSGI就定义了一套非常低级别的接口。
  • 常见的Python Web框架都实现了这个协议:如 CherryPy, Django, web.py, web2py, TurboGears, Tornado, Pylons, BlueBream, Google App Engine[dubious – discuss], Trac, Flask, Pyramid,等等.
  • 关于网关协议CGI/FCGI/SCGI/WSGI对比可参考:https://landybird.github.io/python/2017/09/19/Django%E9%83%A8%E7%BD%B2/
  • gunicorn/uWSGI:

    gunicorn 和 uWSGI 就是实现了 WSGI 协议的 web server。

    而 flask、django 等 web 框架也是用的 wsgi 协议,所以需要在 web framework 之前加上 gunicorn 或者 uwsgi。话说回来,python web 框架都自带 wsgi 服务器,为什么还要这俩呢?一句话,性能太差,只能用于开发环节。

*wsgiref模块(django 框架自带)

django 框架自带的wsgiref模块是用于测试和学习的简单的WSGI服务器模块。

  • 这个模块监听8000端口,把Http请求,根据WSGI协议,转换application函数中的environ参数,然后调用application函数。
  • wsgiref会把application函数提供的响应头设置转换为HTTP协议的响应头,把application的返回(return)作为响应体,根据HTTP协议,生成响应,返回给浏览器。

django自带wsgi server vs 部署uwsgi+nginx后的性能对比可参考:https://www.shuzhiduo.com/A/GBJrnnQEJ0/

  • nginx:

    Nginx是俄罗斯人Igor Sysoev编写的轻量级Web服务器 ,它不仅是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡服务器。

    • 在性能上:Nginx占用很少的系统资源,能支持更多的并发连接(能支持高达50,000个并发连接数),达到更高的访问效率
    • 在功能上:Nginx是优秀的代理服务器和负载均衡服务器
    • 在安装配置上:Nginx安装简单、配置灵活
    • 特点:占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好
    • Nginx支持热部署,启动速度特别快,还可以在不间断服务的情况下对软件版本或配置进行升级,即使运行数月也无需重新启动。

    对于大多数使用者来说,Nginx只是一个静态文件服务器或者http请求转发器,它可以把静态文件的请求直接返回静态文件资源,把动态文件的请求转发给后台的处理程序,例如php-fpm、apache、tomcat、jetty等,这些后台服务,即使没有nginx的情况下也是可以直接访问的(有些时候这些服务器是放在防火墙的面,不是直接对外暴露,通过nginx做了转换)。

    • 想要深入了解,可移步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值