Nginx(二十一)nginx配置python

2023-10-31

一    scgi、wsgi、uwsgi

(1)scgi --> 了解

SCGI是一种'与语言无关'的连接'web服务器'和'web应用程序'的方法

 (2)wsgi --> 协议

​wsgi: 一种'实现python解析'的通用'接口标准/协议',实现了'python web程序'与'web 服务器'之间交互的通用性 --> 'Web 服务器 网关接口'

备注: WSGI是'Web应用程序'的'Python专用接口'标准

好处: 有了这个东西,'web.py'或者'django'等等的'python web开发框架'就可以轻松地'部署'在'不同的web server'上了,基本'不需要'做任何'特殊配置'

Python Web框架 --> 'Django'、'Flask' -->实现了'wsgiI'这个协议

(3)uwsgi --> 协议

uwsgi: 同WSGI一样是一种'通信协议',uwsgi协议是一个'uWSGI服务器自有的协议',它用于定义传输信息的类型(type of information)

特点:  每一个uwsgi packet'前4byte'为传输信息'类型描述',它与WSGI相比是'两样东西'

uWSGI :一种'python web server'或称为Server/Gateway

uwsgi'类似flup',是一种'python web server',uWSGI是'实现'了'uwsgi和WSGI两种协议'的Web服务器,'负责响应'python 的web请求。

备注: 因为'不管'是apache还是'nginx',它们自己都'没有解析动态语言'的功能,而是'分派给'其他模块来做

比如: apache就可以说'内置了php模块',让人感觉好像apache就支持php一样。

uwsgi实现了'wsgi协议'、'uwsgi'、'http'等协议, Nginx中'HttpUwsgiModule'的作用是与uWSGI服务器进行交换

++++++++++++++'架构图如下'++++++++++++++

client ↔ 'Nginx' ↔ 'uWSGI' ↔ 'Python app'

 150330_dmQJ_12.png

uwsgi和wsgi的区别

(4)uWSGI  --> web应用服务器

特点: u是'小写'、WSGI是'大写'

uWSGI 是一个快速的、'纯C语言开发的'、自维护的、对开发者友好的 'WSGI 服务器',旨在提供专业的 'Python web应用发布和开发'

备注: 可使用 C/C++/Objective-C 来'为 uWSGI 编写插件'
​
而uWSGI 是一个'全功能的 HTTP 服务器',他要做的就是把 'HTTP' 协议'转化成'语言支持的'网络协议'

比如: 把 HTTP 协议转化成 WSGI 协议,让 'Python' 可以'直接使用'。uwsgi 是一种 uWSGI 的'内部协议',使用二进制方式和其他应用程序进行通信

(5)uWSGI扮演的角色

++++++++++'uWSGI扮演了解释服务这样的角色'++++++++++

  1)uWSGI先'开几个子进程',然后把你'python程序运行(载入内存)',

  2)然后由'C写的部分负责与nginx通信'(通过unix socket或者tcp)

  3)uwSGI将接收到的请求'调度到'某个'运行着的python程序里'(以wsgi规范),然后'经过web框架'跑到你的程序

  4)再'按wsgi规范回传给uwsgi',再'返回nginx'

备注: uwsgi 服务器还是'独立的套件', 而他'与nginx的通信'用的是'略为修改'的wsgi协议"uwsgi"

说明: 如果是 python 用, 'uwsgi 服务器'甚至可以'直接用pip安装'

(6)wsgi、uwsgi、uWSGI

++++++++++'wsgi' / 'uwsgi' / 'uWSGI' 这'三个概念'的区分

1)wsgi是一种'通信协议'

2)uwsgi也是一种'通信协议'

3)而'uWSGI'是实现了'uwsgi和WSGI'两种协议的'Web服务器'

注意: 不要把uwsgi协议和uWSGI服务器'混淆'

思考:'为什么'有了uWSGI为什么'还需要nginx'

因为nginx具备优秀的'静态内容'处理能力,然后'将python动态内容'转发给'uWSGI服务器',这样可以达到很好的客户端响应。

区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI的概念

二    Python部署Web开发程序的方法

三    nginx配置python

(1)nginx的uwsgi参数

(2)nginx + uwsgi部署python应用

uwsgi官方文档

①  安装uWSGI服务器  -->方式一

++++++++++++'作用机理'++++++++++++

在nginx和python应用之间加一层'支持wsgi协议'的web服务器

静态文件: 由'nginx'自身进行处理

动态文件: 丢'给WSGI服务器',然后WSGI服务器再丢给'web框架'处理。

备注: 最理想的'支持wsgi协议'的web服务器就是'uWSGI'

yum install uwsgi uwsgi-plugin-python uwsgi-devel python-devel -y

备注: 如果你想'安装所有'的uwsgi插件,则可以'安装uwsgi-plugin-all'软件包

查看版本: uwsgi --version --> '2.0.18'

②  安装uWSGI服务器  -->方式二

python程序员'喜欢的'方式

++++++'安装python2系列的pip'++++++

yum -y install python-pip  

pip install --upgrade pip   --> '更新pip版本(必须)'

yum -y install python-devel libevent-devel libjpeg-devel --> '必须安装依赖包,否则报错'

pip install wheel uwsgi     --> '安装uwsgi'

+++++++++'如果是python3.6+'+++++++++

yum -y install python3-pip

pip3 install --upgrade pip3

yum -y install python3-devel libevent-devel libjpeg-devel

pip3 install wheel uwsgi

+++++++++++++++非必需: pip安装uwsgi'状态检测模块'+++++++++++++++

yum -y install ncurses-devel

pip install setuptools -U --> 将 'distutils 升级'到最新版即可

pip install uwsgitop      --> '检测uwsgi运行状态' -->类似 'Linux top 命令' 来查看'监控'数据

③  比较两种安装方式的差异性

++++++++'(1)uwsgi所对应的python版本'++++++++

备注1: 如果是'pip'安装'uwsgi'可以'通过' uwsgi --python-version查看'对应的python版本'

备注2: 如果是'yum'安装'uwsgi'默认与'OS'python'版本一致'

++++++++'(2)yum安装方式参数不能识别'++++++++

yum -y install python-devel libevent-devel libjpeg-devel  --> '非必须'

具体做法: 在上面那些'未识别选项前'加上 '--plugin python' 来告诉 uWSGI 我在'使用 python 插件',后面那些选项你 '用python 插件去解析'

后续: 把'pip安装的uwsgi'参考yum生成的'systemd'进行管理

Ubuntn其它方式安装uwsgi

②   uwsgi.ini配置文件

uwsgi配置说明

1) ini配置为 'key = value' 形式

2) 在ini配置文件里,'#号为注释'

3) 布尔值为 true 和 false 

4) 在命令行里 uwsgi myconf.ini '等价于' uwsgi --ini myconf.ini 

uwsgi.ini常用配置参数详解

uwsgi ini配置文件参数详解

​思考: 'socket'、'http-socket'区别?

+++++++++++++++'通俗场景':+++++++++++++++

1)'socket'对应nginx中'uwsgi_pass'配置       --> 'uwsgi协议'进行数据交换  --> '推荐方式'

2)'http-socket'对应nginx中'proxy_pass'配置  --> 'http协议'进行数据交换

③  启动uWSGI服务

centos yum uwsgi安装报错解决

systemctl 'enable' uwsgi.service

systemctl 'start' uwsgi.service

④   继续做一些准备工作

thunder-lock参数含义 

使用uwsgi emperor模式配置多个站点

确保: uwsgi '和' app.py 属于同一个'目录下'  --> 由于'相对路径'的原因
​
application = app.wsgifunc()' 必不可少',它作为 wsgi 或 uwsgi '操作的handler',uwsgi '不会'运行 '__main__' 中的代码

备注: 参数含义的'解读'

⑤  nginx中的配置  uwsgi_pass

ngx_http_uwsgi_module模块

include uwsgi_params;          'uwsgi参数'
       
uwsgi_pass 127.0.0.1:8008;     通过'uwsgi转发请求',前面配置'uwsgi.ini'的socket端口'保持一致
       
uwsgi_read_timeout 15;         设置'请求超时时间'

报错1

'原因': uwsgi.ini中配置为'http-socket',实际应该配置为'socket'

报错2

官方demo的bug

原因1:  本身'app.py'有问题 --> '==' 和 两个下划线'__'

原因2:  web模块'没有导入'

原因3:  python版本和'python框架版本'不适配

说明: 安装python的模块'web'实际就是安装'web.py',如果不指定版本默认'安装最新'的版本

web.py是适用于'Python的Web框架',功能强大而又简单

'0.51版本'同时支持'Python 2.7'和'Python> = 3.5'

'0.60版本'不支持Python 2.7,'只支持Python 3.5+'

'主流'三个版本: 0.40, 0.51, 0.60

++++++++++++'解决web安装'++++++++++++

pip install web.py==0.51  --> '适合当前python2.7的版本'

'最终解决': 'wsgi-file' 路径的问题

我的理解: 'wsgi-file'是相对于'chdir'的目录的,而'chdir'默认目录'不是'/etc,所以'导致报错'

参考博客

最终的'效果'

nginx+python+fastcgi环境配置(flup版本)

(4)工作原理

(5)配置Flask和Django -->后续核心掌握

 django  ini 配置

使用 uwsgi 启动 django 服务

(5)最佳实践

1)在生产环境中'使用Django'或'Flask'提供的'简易web服务器'性能'太差',一般只用于调试

2)最佳实践: 在nginx和python应用'之间'加一层'支持WSGI协议的web服务器'

  (1) '静态'文件由nginx进行处理

  (2) '动态'文件丢给WSGI服务器,然后WSGI服务器再'丢给web框架处理'

3)最'理想'的'支持WSGI协议'的web服务器就是'uWSGI'

工作原理

python的动静分离

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx(二十一)nginx配置python 的相关文章

  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • ctypes 错误:libdc1394 错误:无法初始化 libdc1394

    我正在尝试将程序编译为共享库 我可以使用 ctypes 在 Python 代码中使用该库 使用以下命令该库可以正常编译 g shared Wl soname mylib O3 o mylib so fPIC files pkg config
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 在 python 3 中使用子进程

    我使用 subprocess 模块在 python 3 中运行 shell 命令 这是我的代码 import subprocess filename somename py in practical i m using a real fil
  • 从sklearn PCA获取特征值和向量

    如何获取 PCA 应用程序的特征值和特征向量 from sklearn decomposition import PCA clf PCA 0 98 whiten True converse 98 variance X train clf f
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • 如何在VIM中设置文件的正确路径?

    每当我击中 pwd在 vim 中命令总是返回路径C Windows system32 即使我在桌面上的 Python 文件中 所以每当我跑步时 python 命令返回 python can t open file Users myname
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • 在 Windows 上使用带有对数刻度的 matplotlib 时出现 Unicode 错误

    我正在使用 python 2 6 和 matplotlib 如果我运行 matplotlib 库页面中提供的示例 histogram demo py 它工作正常 我已经大大简化了这个脚本 import numpy as np import
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • git设置编码

    git config global core quotepath false 显示 status 编 git config global gui encoding utf 8 图形界面编码 git config global i18n co
  • 你好,五月

    五月算是上大学以来最忙碌的一个月 因为所有事碰巧都堆到这个月了 当然也是因为这个月的存在 让我成长了许多也让我认识到原来自己可以做这么多事 人力项目 柳暗花明 人力资源项目 五一七天时间我们全天基本上是在423度过的 每天都一起在研究如何实
  • macOS查看文件路径

    当在mac系统中需要输入文件路径 快速找到文件路径 有以下2个步骤 1 点击Finder查看全部文件 shift command c 进入到磁盘界面找到需要放置的文件夹 2 打开终端输入命令 defaults write com apple
  • Ubuntu 安装 Wireshark

    Ubuntu 安装 Wireshark 概述 Wireshark 是一款图形化的网络协议分析工具 它允许你交互式地浏览实时网络或以前保存的捕获文件中的数据包数据 Wireshark 的本地捕获文件格式是 pcapng 格式 或者是 pcap
  • jsunix时间戳转换成时间

    jsunix时间戳转换成时间 js实现unix时间戳转换代码教程如下 输入一个时间 实现结果 转换成时间戳 js实现代码如下 act 鏃堕棿鎴宠浆鎹 version 1 1 author youngxj date 2018 07 01 ur
  • 训练---递归与递推

    文章目录 一 递归实现指数型枚举 递归 二 递归实现排列型枚举 递归 三 简单斐波那契 四 费解的开关 五 递归实现组合型枚举 六 带分数 七 飞行员兄弟 七 翻硬币 一 递归实现指数型枚举 递归 任意门 include
  • C语言输入输出函数printf与scanf的用法格式

    转自 微点阅读 https www weidianyuedu com content 4617732110906 html c语言输入输出函数printf与scanf的用法格式 printf 函数用来向标准输出设备 屏幕 写数据 scanf
  • 关于nginx服务关闭之后端口占用kill不掉的问题

    这里写自定义目录标题 首先介绍下当前环境 首先介绍下当前环境 nginx版本 1 21 6 linux版本 CentOS8 使用命令行 ps ef grep nginx 查询出当前 nginx进程 使用kill 9 进程号 来进行强制关闭n
  • Activiti和tk.mybatis的坑

    近期开发关于工作流的项目 遇到一个很坑的问题 activiti和tk mybatis居然会有冲突 先看异常 报错的原因大概就算这句话 Parameter 1 of method springProcessEngineConfiguratio
  • KubeVela 再升级:交付管理一体化的云原生应用平台

    11月3日 2022 杭州 云栖大会上 阿里云智能云原生应用平台总经理丁宇宣布 KubeVela 面向四大核心方向能力升级 打造交付管理一体化的云原生应用平台 本次升级是 KubeVela 从应用交付到应用管理不断量变形成的一次质变 同时也
  • 用python读写.mat文件——使用scipy库的scipy.io和h5py库

    python 中的scipy库和h5py库 1 读 mat文件 1 1 用scipy io读取 在用python处理matlab的mat文件时 发现数据量较小的文件可以直接通过scipy库的scipy io读取 import scipy i
  • linux 安装 yum etcd,安装etcd - Go语言中文网 - Golang中文社区

    etcd是一个golang编写的分布式 高可用的一致性键值存储系统 用于提供可靠的分布式键值 key value 存储 配置共享和服务发现等功能 etcd可以用于存储关键数据和实现分布式调度 在现代化的集群运行中能够起到关键性的作用 etc
  • VSCode官网无法下载

    因为不是国内的服务器 所以有可能无法下载或者下载失败 将下载地址https stable之间的部分更改为vscode cdn azure cn 重新复制地址下载就可以
  • 语音信号加噪频域分析与滤波处理(MATLAB GUI)

    语音信号加噪频域分析与滤波处理 MATLAB GUI 文章目录 语音信号加噪频域分析与滤波处理 MATLAB GUI GUI功能界面如图所示 部分代码展示 IIR高通滤波结果 IIR带通滤波结果 联系方式 email Jaceshuai j
  • python重复执行_python scrapy重复执行实现代码详解

    这篇文章主要介绍了python scrapy重复执行实现代码详解 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 Scrapy是一个为了爬取网站数据 提取结构性数据而编写的应用框架 我们只需
  • windows使用rdp远程连接deepin

    deepin版本是截止目前最新的15 11 可以安装xrdp和x11vnc来使用windows可以远程连接 首先开启ssh sudo apt get install openssh server 开启服务 sudo systemctl st
  • 云计算 第七章 云安全(3)概述 云计算面临的安全问题 云安全问题的深层原因 云安全关键技术 云计算信息安全的国内外标准化

    关注公众号凡花花的小窝 收获更多的考研计算机专业编程相关的资料 加密与解密 目前 云服务提供商般采用密码学中的技 术来保证数据安全 常用技术之一就是对数招进1加8和联名密码技术不仅服务于信息的加密和解密 也是身份认证 访问控制和数排签名等多
  • 根据E-R图设计数据库表

    上图是一个E R图 一共有三个实体 司机 车辆 车队 并且这几个实体之间互相具有一定的联系 我们首先把所有实体的表写出来 数据类型的选择请参考文章 https blog csdn net qq 61659383 article detail
  • 最完整梳理:SSL证书的诞生和历史

    HTTPS加密已经成为主流的网络传输协议 但是 SSL证书的诞生和历史你了解吗 跟着本文一起了解一下SSL证书的进化史 SSL TLS协议进化史 SSL协议 Secure Sockets Layer 安全套接层 是一套网络通信安全协议 具有
  • Nginx(二十一)nginx配置python

    一 scgi wsgi uwsgi 1 scgi gt 了解 SCGI是一种 与语言无关 的连接 web服务器 和 web应用程序 的方法 2 wsgi gt 协议 wsgi 一种 实现python解析 的通用 接口标准 协议 实现了 py