一、测试运行python项目

  1.1 Flask项目

    

    说明1:当我们直接用编译器运行Flask项目的时候,会有一个提示:意思就是:这是开发环境的服务器,不能用于生产环境的部署,请使用WSGI的服务器替换

  1.2 Django项目

    

    说明2:当我们直接用编译器运行Django项目的时候,同样有个提示,这是一个开发环境的服务器,意思就是同样不能用于生产环境

  1.3 总结  

    • Flask自带一个服务器,主要用在开发环境。默认情况下一次只能处理一个请求,处理能力比较有限。
    • Django 运行 runserver 命令可以直接作为服务器使用,但是也是单线程的。性能差,如果出现错误挂掉。那么整个进程都挂掉了
    • 所以我们在生产环境要,就要使用安全稳定效率高,性能强的服务器。
    • 之所以Flask和Django直接运行不能用于生产环境是因为Flask和Django是web开发框架,而不是web服务器,web框架开发的时候,只是为了方便测试,提供了一个测试服务器而已。

二、web服务器

  通过上面的例子可以看出,如果让我们开发出来的项目能得到成千上万,几十万,甚至几百万几千万的用户访问的话,我们需要一个强劲有力的web服务器为我们保驾护航。
  web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。我常用的Nginx就是一个web服务器,Djangoflask就是web框架。

  web服务器的特点:

    • 接受客户端(浏览器,app,小程序等)发送的请求
    • web服务器通常都会支持高并发(Nginx上万级别的并发)

  所以我们在部署python项目的时候,都需要再额外部署一个web服务器,主要作用就是给我们的应用提供一个高并发安全的互联网访问环境,通常我们使用Nginx作为我们项目的web服务器。

三、Nginx服务器

  nginx是一款轻量级的web 服务器,反向代理服务器及电子邮件(imap/pop3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,大部分网站都有使用nginx。

  nginx的有点:

  1. 支持高并发,能够支持高达 50,000 个并发连接数的响应,这样我们的网站并发性就很棒。
  2. 负载均衡,当访问量还是多的时候,可以同时开启多个应用服务器,进行负责均衡
  3. 提供静态服务,动静分离,减少静态资源访问对应用服务器的压力
  4. 反向代理

  nginx在部署的时候可以给我的应用服务器,提供一个高并发,高可靠性,安全的网络访问环境,通过Nginx可以接收到用户通过浏览器或者app等前端的方式访问到我们的网站。

  注意:这里Nginx只能帮助我们接收客户端(浏览器,app,小程序等)的请求,Nginx并不具备处理请求的能力。例如:用户发送了一个获取用户信息的请求,Nginx并没有用户的信息,所以Nginx并不能直接处理用户的请求,所以Nginx需要将用户的这个请求转发给我们的应用服务器(Flask或者Django程序等),但是,这里注意!注意!注意!,Nginx和我们Web框架(Flask/Django)也不能直接通信,他们的协议不一样(通俗的讲就是一个说英语的,一个说汉语的,谁也听不懂谁),这是就需要找一个翻译,既能读懂Nginx的协议,也能读懂python的web框架协议的,而且还要高效,这个东西就是WSGI。

四、WSGI和uWSGI

  WSGI是一种通信协议。WSGI 不是框架,也不是一个模块,而是介于 Web应用程序(Flask/Django)与 Web Server (Nginx)之间交互的一种规范。

  uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

  所以我们使用uWSGI充当Nginx和我们的程序(Flask/Django)之间的桥梁,这也就是为什么我们部署python项目需要uWSGI和Nginx的原因了

五、通过Nginx和uWSGi请求响应全过程

  

python部署项目为什么要用Nginx和uWSGI的更多相关文章

  1. python部署到服务器(2) 一一 nginx+uwsgi+Django

    参考菜鸟教程,https://blog.csdn.net/qq_42314550/article/details/81805328, 和 https://www.cnblogs.com/chenice ...

  2. Python 部署项目(Tomcat 容器)

    此前书写了多实例的 Tomcat 启动等操作的脚本,今天完善 Tomcat 多实例部署(本脚本只提供思路) 脚本内容: #!/usr/bin/env python # _*_coding:utf-8_ ...

  3. 项目的发布(nginx、uwsgi、django、virtualenv、supervisor)

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  4. 使用Nginx+Uwsgi部署Python Flask项目

    第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...

  5. nginx+uwsgi+djangos部署项目完整

    1.基本信息 Linux 版本:SentOS7.4 Python 版本:3.7.1 2.下载 uWSGI pip3 install uwsgi uwsgi 主要的任务是座位分发路由的服务器. 先写一个 ...

  6. Python web项目Django部署在Ubuntu18.04腾讯云主机上

    Django2.1 + Python3.6 + nginx + uwsgi 部署到Ubuntu18.04 材料准备 准备一个Django项目 准备一台Ubuntu18.04的主机 ssh连接到主机(腾 ...

  7. nginx+uwsgi+virtualenv+supervisor部署项目

    一.导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的 ...

  8. uWSGI+nginx+django+virtualenv+supervisor部署项目

    一.前言 在部署项目前,你已有一个能够在你本机测试过,能正常启动的Django项目(毕竟本文主要讲解部署Django项目),以及掌握了Linux系统的一些基本命令. 相关链接: Centos7安装py ...

  9. python - django 项目部署 Ubuntu 服务器后接口访问一直 502 问题

    问题描述:最近有了一台 Ubuntu 的服务器,然后准备部署个项目,结果没想到部署的过程跟用 Centos 的时候还有点不一样,最后一步我是卡在了 uwsgi 这里,访问一直502,且可以访问项目的静 ...

  10. 基于Nginx和uWSGI在Ubuntu上部署Django项目

    前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...

随机推荐

  1. [转帖]鹅厂微服务发现与治理巨作PolarisMesh实践-上

    文章目录 概述 定义 核心功能 组件和生态 特色亮点 解决哪些问题 官方性能数据 架构原理 资源模型 服务治理 基本原理 服务注册 服务发现 安装 部署架构 集群安装 SpringCloud应用接入 ...

  2. 日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

    前言 随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息.因此,作为工程师,了解主流的日志记录框架非常重要.虽然应用程序的运行结果 ...

  3. TypeScript中的元组 Tuple

    元组类型 // 元组类型:表示一个已知元素数量和类型的数组,各元素的类型不必相同 let undata: [string, '男'| '女']; //已知数量是两个.类型分别是字符串和男或者女 und ...

  4. vue中使用refs出现undefined的解决方法

    最近遇见一个情况, 在methods:{}中的某个方法, 通过父组件去调用子组件的一个方法:this.$refs.xxx 打印出来的却是undefined? 因为: 是如果在DOM结构中的某个DOM节 ...

  5. TortoiseGit 常见问题汇总

    1.test分支修改后合并到master分支 1)切换本地分支到master分支 2)TortoiseGit --->  merge,选择远程分支test 提交到远程分支master 2.将远程 ...

  6. 从零开始配置 vim(11)——插件管理

    之前我们介绍了基础配置部分和快捷键配置部分.如果你配置了这两个部分,vim已经算是比较好用了.但是作为代码编辑器来讲还是显的比较简陋,用这些配置来完成日常的编码任务会显得力不从心.vim比较强大的一点 ...

  7. Ubuntu ISO镜像文件下载(Ubuntu 22.04.2 LTS)

    Ubuntu 22.04.2 LTS 链接:https://pan.baidu.com/s/1YuWSOBH9mTZMjJTW7HM91g 提取码:b8lf

  8. 教你用JavaScript实现调皮的字母

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,制作提高打字速度的小游戏-调皮的字母.点击与屏幕上字母相对应的按键,若按键与出现的字母一致 ...

  9. idea破解《当脚本破解方式无效或不方便执行时可采用此方法》

    idea新版破解有时会各种不成功,很耽误事.所以,再次整理一个相对省事有效的办法.<此方式为修改idea启动脚本破解方式>内容如下: 一:下载此激活工具 二:按下图从下载的文件中找到箭头标 ...

  10. 小知识:TFA收集日志报错空间不足

    今天在某客户环境下分析某节点驱逐的故障,发现有安装TFA,所以使用一键收集包含故障时刻的日志 tfactl diagcollect -from "2020-08-14 03:00:00&qu ...