目录

  • 官方文档
  • 安装
  • 配置风格
    • 命令行参数(command line args)
    • 环境变量(environment variable)
    • xml文件
    • ini文件
    • yaml文件
  • 配置参数
    • socket
    • protocol
    • processes
    • harakiri
    • harakiri-verbose
    • xml
    • daemonize
    • listen
    • max-var
    • buffer-size
    • chmod
    • master
    • socket-timeout
    • ini
    • yaml or yml
    • json
    • limit-as
    • reload-on-as
    • reload-on-rss
    • env
    • vacuum
    • threads
    • wsgi-file
    • chdir
    • evil-reload-on-as
    • evil-reload-on-rss
    • disable-logging
    • http
  • 常用配置项
  • 应用于django
  • 应用于flask
  • Q&A
    • 如何高效的配置一个uwsgi.ini

官方文档

uwsgi:https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html

安装

pip install uwsgi

uwsgi仅支持linux环境下安装。

配置风格

uwsgi支持多种配置格式:命令行,yaml,ini,xml…,
具体如何部署python项目可以参考我的另一篇博客:https://blog.csdn.net/General_zy/article/details/121783016django,flask项目docker部署(uwsgi)——关于项目上线的杂七杂八

命令行参数(command line args)

格式:–socket <path/address>

例:uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

环境变量(environment variable)

格式:选项名都要换成大写,并且加上“UWSGI_”前缀,所有选项名中的“-”都要换成下划线“_”

例:UWSGI_MAX_VARS="<n>""UWSGI_SOCKET=127.0.0.1:8000"

xml文件

格式:

<uwsgi><socket>127.0.0.1:3031</socket><master/>
</uwsgi>

ini文件

[uwsgi]
socket = 127.0.0.1:3031
master = true

yaml文件

uwsgi:socket: 127.0.0.1master: 1

配置参数

socket

指定uwsgi的客户端将要连接的socket的路径(使用UNIX socket的情况)或者地址(使用网络地址的情况)。(用作uwsgi中间件时使用)

# 命令行
--socket /tmp/uwsgi.sock
以上配置将会绑定到 /tmp/uwsgi.sock 指定的UNIX socket# 命令行缩写
-s 127.0.0.1:1717
以上配置会绑定到ipv4地址127.0.0.1的1717端口# ini
[uwsgi]
socket = 127.0.0.1:1717

protocol

设置默认的通信协议(uwsgi,http,fastcgi)

--protocol <protocol>

processes

设置工作进程的数量

# 命令行
--processes 8
以上配置会产生8个工作进程# 命令行
--workers 4
以上配置会产生4个工作进程# 命令行缩写
-p 8
以上会产生8个工作进程# xml
<uwsgi><workers>3</workers>
</uwsgi>
这个配置会产生3个工作进程

harakiri

设置harakiri超时时间,一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)。

--harakiri 60

harakiri-verbose

当一个请求被harakiri杀掉以后,将在uWSGI日志中得到一条消息。

--harakiri-verbose

以上配置会开启harakiri的额外信息。

xml

加载指定的xml配置文件。当使用命令行参数时,可以使用简化命令“-x”。在xml配置文件中,可以有多个“”节,不同的节之间用id属性区分。通过在文件名后面增加id(使用冒号分隔)来选择应用哪个“”节。

--xml /etc/myapp.xml
以上配置会加载/etc/myapp.xml这个配置文件。--xml /etc/myapp.xml:django
以上命令会使用/etc/myapp.xml这个配置文件中的“django”这个节作为配置选项

xml配置文件:

<all_the_apps><uwsgi id="turbogears"><socket>/tmp/tg.sock</socket></uwsgi><uwsgi id="django"><socket>/tmp/django.sock></uwsgi>
</all_the_apps>

这种情况下,根节点可以是任何想要的名字(这就允许将uwsgi这个配置节加到其他xml文件中)

如果在命令行的最后一个参数以“.xml”结尾,那么就隐含将加载该xml文件作为配置。

/usr/bin/uwsgi /etc/myapp.xml
以上命令会使uWSGI自动加载 /etc/myapp.xml配置文件。

daemonize

使进程在后台运行,并将日志打到指定的日志文件或者udp服务器

--daemonize /var/log/uwsgi.log
这个指令会让uWSGI在后台运行并将日志打到 /var/log/uwsgi.log文件中。[uwsgi]
daemonize = 192.168.0.100:4000
这个配置将会使uWSGI在后台运行,并且将日志消息发送给监听192.168.0.100:4000这个地址的udp服务器。

listen

设置socket的监听队列大小(默认:100)。

每一个socket都有一个相关联的队列,请求会被放入其中等待进程来处理。当这个队列慢的时候,新来的请求就会被拒绝。

队列大小的最大值依赖于系统内核。

max-var

设置uwsgi客户端能够传递给uwsgi的变量的最大数量值。这只是一个安全相关的值,大多数情况下不需要设置它。

buffer-size

设置用于uwsgi包解析的内部缓存区大小。默认是4k,可以增加这个值到64k。

--buffer-size 32768

这个命令会允许uWSGI服务器接收最大为32k的uwsgi包,再大的包就会被拒绝。

chmod

unix socket是个文件,所以会受到unix系统的权限限制。如果uwsgi客户端没有权限访问uWSGI socket,可以用这个选项设置unix socket的权限。

当在xml配置文件中只是用这个选项作为一个标识符,那么会将权限设为666,否则就是设置为指定的权限值。

<uwsgi><chmod-socket/>
</uwsgi>
这个配置会将socket文件的权限设为666<uwsgi><chmod-socket>644</chmod-socket>
</uwsgi>
这个配置会将socket文件的权限设为644

master

启动主进程。

socket-timeout

为所有的socket操作设置内部超时时间(默认4秒)。

--socket-timeout 10

这个配置会结束那些处于不活动状态超过10秒的连接。

ini

设置ini配置文件的路径。

--ini <inifile>

yaml or yml

设置yaml配置文件的路径。

--yaml <yamlfile>

json

设置json格式的配置文件的路径。

格式遵循的规则跟其他支持的配置格式一样(支持正整数,布尔数和数组):

{"uwsgi":  {"http": ":8080","master": true,"module": "werkzeug.testapp:test_app","workers": 8,"pythonpath":  [ "/foo", "/bar" ]}}

为了使用JSON,需要jansson库。默认情况下,会自动检测到库的所在位置,但是也可以buildconf或者默认ini配置文件来指定。

--json <jsonfile>

limit-as

通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。

--limit-as 256

这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。

reload-on-as

当一个工作进程的虚拟内存占用超过了限制的大小,那么该进程就会被回收重用(重启)。

--reload-on-as 128

这个配置会重启所有占用虚拟内存超过128M的工作进程。当工作进程因此重启时,本次请求的响应不会受影响,返回正常结果。

reload-on-rss

跟reload-on-as的效果类似,不过这个选项控制的是物理内存。可以同时使用这2个选项:

uwsgi:reload-on-as: 128reload-on-rss: 96

这个配置会导致所有占用128M以上虚拟内存或者超过96M物理内存的工作进程重启。

当工作进程因此重启时,本次请求的响应不会受影响,返回正常结果。

env

设置一个系统环境变量。

[uwsgi]
env = DJANGO_SETTINGS_MODULE=mysite.settings

这个配置将会设置一个环境变量DJANGO_SETTINGS_MODULE,它的值为mysite.settings

vacuum

当服务器退出的时候自动删除unix socket文件和pid文件。

threads

开启线程操作模式,必须指定每个工作进程的线程数。

--threads 40 --workers 2

这个配置会导致生成2个工作进程,每个工作进程有40个子线程。

wsgi-file

加载指定的WSGI文件

chdir

工作目录

evil-reload-on-as

主进程会重启占用虚拟内存超过M的工作进程。

--evil-reload-on-as <n>

evil-reload-on-rss

主要效果跟evil-reload-on-as一样,但是这个选项控制的是非共享物理内存。

--evil-reload-on-rss <n>

disable-logging

不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中。

http

开启嵌入的http服务器、路由、网关、负载均衡、代理。(用来直接做web服务器时使用)

常用配置项

[uwsgi]
socket = 127.0.0.1:9000
chdir = /xspeeder/xweb/
wsgi-file = xweb/wsgi.py
master = true
processes = 1
buffer-size = 65535
evil-reload-on-rss = 256
evil-reload-on-as = 256
threads = 1
daemonize = /home/log/wsgi.log
vacuum = true
disable-logging = true

应用于django

[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2

启动:

uwsgi yourfile.ini

应用于flask

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return "<span style='color:red'>I am app 1</span>"

启动:

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191

Q&A

如何高效的配置一个uwsgi.ini

一个高效的uwsgi.ini文件应该包含以下部分:

  1. [uwsgi] 部分:这是uwsgi配置文件的主要部分,其中包含了uwsgi服务器的一些基本配置。

    socket:这是uwsgi服务器将要监听的地址和端口,它应该与你的nginx代理中的upstream相匹配。
    chdir:这是你的Django项目的根目录,uwsgi会在这个目录下启动应用程序。
    module:这是你的Django应用程序的主模块,它应该是<项目名>.wsgi:application。
    master:这个选项将启用uwsgi主进程。
    processes:这个选项是启动的uwsgi工作进程数。
    threads:每个工作进程的线程数。

  2. env 部分:这个部分包含了您的Django应用程序需要的环境变量,例如数据库连接信息、密钥等等。

  3. logto 部分:这个部分指定了uwsgi日志文件的位置,以及日志级别。

[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /path/to/project
module = project.wsgi:application
master = true
processes = 2
threads = 4env = DJANGO_SETTINGS_MODULE=project.settings.production
env = SECRET_KEY=your_secret_key_herelogto = /var/log/uwsgi.log
logformat = %(addr) - %(user) %(time) "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"

uwsgi服务器将监听/tmp/uwsgi.sock,并启用2个工作进程,每个工作进程4个线程。项目根目录为/path/to/project,主模块为project.wsgi:application。环境变量DJANGO_SETTINGS_MODULE和SECRET_KEY也被设置。最后,日志文件被记录在/var/log/uwsgi.log中,日志格式被指定为Apache日志格式。

uwsgi配置文件详解相关推荐

  1. nginx服务器安装及配置文件详解

    nginx服务器安装及配置文件详解 seanlook 5月26日 发布 4 推荐 97 收藏,9.2k 浏览 nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自 ...

  2. mybatis mysql 配置文件_Mybatis配置文件详解(4)

    本次主要来了解: MyBatis数据库配置文件SqlMapConfig.xml SQL映射配置中输入映射的配置 SQL映射配置中输出映射的配置 SQL映射配置中动态SQL语句的配置 1. SqlMap ...

  3. MyBatis复习笔记2:配置文件详解

    配置文件详解 属性(properties) MyBatis可以使用 properties 来引入外部 properties 配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或 ...

  4. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解

    前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...

  5. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  6. CENTOS7 高性能Linux集群 通过yum进行 haproxy配置 !安装 !使用!HAProxy配置文件详解

    Haproxy配置 永久修改名字:便于区分虚拟机! Haproxy:hostnamectl set-hostname haproxy Web1: hostnamectl set-hostname WE ...

  7. 用户管理 之 用户(User)和用户组(Group)配置文件详解

    作者:北南南北 来自:LinuxSir.Org 摘要:本文详解用户(User)和用户组(Group)的配置文件,本文是<Linux 用户(User)和用户组(Group)管理概述>文档的关 ...

  8. 【ZooKeeper】配置文件详解

    ZooKeeper的配置文件详解 zkServer.sh读取的默认配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg.如果要用其它配置文件.如下传递配置文件参数: zkServer.s ...

  9. vsftpd配置文件详解

      1.默认配置: 1>允许匿名用户和本地用户登陆.      anonymous_enable=YES      local_enable=YES 2>匿名用户使用的登陆名为ftp或an ...

最新文章

  1. BiLSTM-CRF学习笔记(原理和理解) 维特比
  2. 参悟JavaScript
  3. 面试题—Mysql篇
  4. pytorch教程龙曲良31-35
  5. 分布式事物(2PC,3PC,CAP,柔性与刚性事物,LCN)
  6. PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
  7. 谁考了第k名(信息学奥赛一本通-T1176)
  8. 从Java直接输出到flume_js生成日志信息及实现java直接调用flume
  9. java静态接口方法使用_使用静态方法对接口进行Java编程
  10. nvm for window 开源资源(免费下载)
  11. java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码
  12. textarea输入框光标定位问题
  13. C#求学之路MVC《医院管理系统》项目研发文献
  14. 【ZBH选讲·树变环】
  15. 21届秋招记录——银行篇
  16. 《沉默的大多数》王小波——读后感
  17. Latex安装失败问题
  18. 树莓派+USB摄像头进行网络监控—MJPG-Streamer
  19. 【论文笔记】投影仪-相机系统标定方法
  20. 【RedisTemplate】

热门文章

  1. python中偏度和峰度的计算公式
  2. 作为前辈,你有什么忠告想跟网工专业的同学们说?
  3. flyme4.2 android,流畅度有所提高 魅族Flyme4.2.6上手体验
  4. Android开机自启动C程序调试
  5. stm32串口接收不到数据的一些问题
  6. js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)
  7. 学习python出现的问题_读取表格分界符不对
  8. 移动硬盘文件丢失怎么恢复?
  9. [HW必备]|蓝队防守必须排查的57个安全漏洞与解决方案
  10. 卷积神经网络简单认知