UWSGI配置中文說明

uWSGI參考資料(1.0版本的配置選項(xiàng)列表)

下面的內(nèi)容包含了大部分uWSGI的配置選項(xiàng),這些配置選項(xiàng)的列舉沒有特定的順序。每一個(gè)選項(xiàng)都可以使用在任何一種支持的配置方式里(如命令行參數(shù)、環(huán)境變量、xml文件、ini文件、yaml格式文件以及LDAP)。有些選項(xiàng)的使用需要某些插件的支持,這些插件的名字都會(huì)在文檔里有說明。

文檔中的例子使用了多種形式的配置方式來讓使用者更好的理解uwsgi的工作方式。

如果你剛開始接觸uWSGI,你最好是先看一下快速開始例子,這些對(duì)實(shí)際使用過程的中的一些選項(xiàng)做了舉例說明,另外下面列舉的非常多的配置選項(xiàng)說明對(duì)于新手的閱讀可能有一點(diǎn)吃力。

配置風(fēng)格的簡(jiǎn)單介紹

當(dāng)使用某一種配置風(fēng)格或者將一種風(fēng)格轉(zhuǎn)換另一個(gè)風(fēng)格時(shí),需要注意一下規(guī)則:

命令行參數(shù)(command line args):需要給選項(xiàng)增加“--”前綴

例如socket選項(xiàng):

--socket

環(huán)境變量(environment variable):選項(xiàng)名都要換成大寫,并且加上“UWSGI_”前綴,所有原來選項(xiàng)名中的“-”都要換成下劃線“_”

例如max-vars選項(xiàng)將變成:

UWSGI_MAX_VARS=""

xml文件:xml文件中的根結(jié)點(diǎn)應(yīng)該是,所有的選項(xiàng)值是作為文本節(jié)點(diǎn)。標(biāo)識(shí)符類型的選項(xiàng)可以沒有對(duì)應(yīng)的值。

socket選項(xiàng)和master選項(xiàng)可以如下配置:

127.0.0.1:3031

ini文件:配置域應(yīng)該是uwsgi,標(biāo)識(shí)符類型的選項(xiàng)的值可以設(shè)為true或者1。

socket選項(xiàng)和master選項(xiàng)可以如下配置:

[uwsgi]socket =127.0.0.1:3031master =true

yaml格式文件:根元素需要設(shè)置為uwsgi,標(biāo)識(shí)符類型的選項(xiàng)的值可以設(shè)為true或者1。

socket選項(xiàng)和master選項(xiàng)可以如下配置:

uwsgi:? socket:127.0.0.1master:1

lda格式:這個(gè)格式比較復(fù)雜,你應(yīng)該查閱專門的wiki文檔。見useLDAP。

無盡的選項(xiàng)列表...

深呼吸,現(xiàn)在我們開始。

socket or uwsgi-socket

指定uwsgi的客戶端將要連接的socket的路徑(使用UNIX socket的情況)或者地址(使用網(wǎng)絡(luò)地址的情況)。你最多可以同時(shí)指定8個(gè)socket選項(xiàng)。當(dāng)使用命令行變量時(shí),可以使用“-s”這個(gè)縮寫。

--socket /tmp/uwsgi.sock

以上配置將會(huì)綁定到 /tmp/uwsgi.sock 指定的UNIX socket

-s127.0.0.1:1717

以上配置會(huì)綁定到ipv4地址127.0.0.1的1717端口

[uwsgi]socket =127.0.0.1:1717socket =127.0.0.1:2626

以上配置會(huì)綁定到ipv4地址127.0.0.1的1717端口以及ipv4地址127.0.0.1的2626端口。

protocol

設(shè)置默認(rèn)的通信協(xié)議(uwsgi,http,fastcgi)

--protocol

processes or workers

為預(yù)先派生模式設(shè)置工作進(jìn)程的數(shù)量。這個(gè)設(shè)置是你的app能實(shí)現(xiàn)簡(jiǎn)單并且安全的并發(fā)能力的基礎(chǔ)。你設(shè)置的工作進(jìn)程越多,你就能越快的處理請(qǐng)求。每一個(gè)工作進(jìn)程都等同于一個(gè)系統(tǒng)進(jìn)程,它消耗內(nèi)存,所以需要小心設(shè)置工作進(jìn)程的數(shù)量。如果你設(shè)置的數(shù)量太多,就有可能是系統(tǒng)崩潰。

當(dāng)你使用命令行參數(shù)時(shí),你可以使用簡(jiǎn)化命令“-p”

--processes8

以上配置會(huì)產(chǎn)生8個(gè)工作進(jìn)程

--workers4

以上配置會(huì)產(chǎn)生4個(gè)工作進(jìn)程

-p8

以上會(huì)產(chǎn)生8個(gè)工作進(jìn)程

3

這個(gè)配置會(huì)產(chǎn)生3個(gè)工作進(jìn)程

harakiri

這個(gè)選項(xiàng)會(huì)設(shè)置harakiri超時(shí)時(shí)間(可以看wiki首頁的相關(guān)內(nèi)容)。如果一個(gè)請(qǐng)求花費(fèi)的時(shí)間超過了這個(gè)harakiri超時(shí)時(shí)間,那么這個(gè)請(qǐng)求都會(huì)被丟棄,并且當(dāng)前處理這個(gè)請(qǐng)求的工作進(jìn)程會(huì)被回收再利用(即重啟)。

--harakiri60

這個(gè)設(shè)置會(huì)使uwsgi丟棄所有需要60秒才能處理完成的請(qǐng)求。

harakiri-verbose

When a request is killed by harakiri you will get a message in the uWSGI log. Enabling this option will print additional info (for example in Linux will be reported the current syscall)

當(dāng)一個(gè)請(qǐng)求被harakiri殺掉以后,你將在uWSGI日志中得到一條消息。激活這個(gè)選項(xiàng)會(huì)打印出額外的信息(例如,在linux中會(huì)打印出當(dāng)前的syscall)。

--harakiri-verbose

以上配置會(huì)開啟harakiri的額外信息。

spooler-harakiri

set the harakiri mode for spooler tasks

為spooler任務(wù)設(shè)置harakiri模式

--spooler-harakiri option

mule-harakiri

為mule進(jìn)程設(shè)置harakiri模式

--mule-harakiri

xmlconfig or xml

加載指定的xml配置文件。當(dāng)使用命令行參數(shù)時(shí),可以使用簡(jiǎn)化命令“-x”。在xml配置文件中,你可以有多個(gè)“”節(jié),不同的節(jié)之間用id屬性區(qū)分。通過在文件名后面增加id(使用冒號(hào)分隔)來選擇應(yīng)用哪個(gè)“”節(jié)。

--xml /etc/myapp.xml

以上配置會(huì)加載/etc/myapp.xml這個(gè)配置文件。

--xml /etc/myapp.xml:django

以上命令會(huì)使用/etc/myapp.xml這個(gè)配置文件中的“django”這個(gè)節(jié)作為配置選項(xiàng)

這個(gè)文件內(nèi)容可以像如下這樣:

/tmp/tg.sock/tmp/django.sock>

這種情況下,根節(jié)點(diǎn)可以是任何你想要的名字(這就允許你可以將uwsgi這個(gè)配置節(jié)加到其他xml文件中)

如果在命令行的最后一個(gè)參數(shù)以“.xml”結(jié)尾,那么就隱含將加載該xml文件作為配置。

/usr/bin/uwsgi /etc/myapp.xml

以上命令會(huì)使uWSGI自動(dòng)加載 /etc/myapp.xml配置文件。

set

設(shè)置一個(gè)占位符

--setKEY=VALUE

daemonize

使進(jìn)程在后臺(tái)運(yùn)行,并將日志打到指定的日志文件或者udp服務(wù)器

--daemonize /var/log/uwsgi.log

這個(gè)指令會(huì)讓uWSGI在后臺(tái)運(yùn)行并將日志打到 /var/log/uwsgi.log文件中。

[uwsgi]daemonize =192.168.0.100:4000

這個(gè)配置將會(huì)使uWSGI在后臺(tái)運(yùn)行,并且將日志消息發(fā)送給監(jiān)聽192.168.0.100:4000這個(gè)地址的udp服務(wù)器。見UdpLogging

stop

發(fā)送一個(gè)SIGINT信號(hào)給文件中的pid標(biāo)識(shí)的uWSGI

--stop

reload

發(fā)送一個(gè)SIGHUP信號(hào)給文件中的pid標(biāo)識(shí)的uWSGI

--reload

listen

設(shè)置socket的監(jiān)聽隊(duì)列大?。J(rèn):100)。

每一個(gè)socket都有一個(gè)相關(guān)聯(lián)的隊(duì)列,請(qǐng)求會(huì)被放入其中等待進(jìn)程來處理。當(dāng)這個(gè)隊(duì)列慢的時(shí)候,新來的請(qǐng)求就會(huì)被拒絕。

隊(duì)列大小的最大值依賴于系統(tǒng)內(nèi)核。

max-vars

設(shè)置uwsgi客戶端能夠傳遞給uwsgi的變量的最大數(shù)量值。這只是一個(gè)安全相關(guān)的值,大多數(shù)情況下你是不需要設(shè)置它的。

buffer-size

設(shè)置用于uwsgi包解析的內(nèi)部緩存區(qū)大小。默認(rèn)是4k。

如果你打算接受一個(gè)擁有很多請(qǐng)求頭的大請(qǐng)求,你可以增加這個(gè)值到64k。

--buffer-size32768

這個(gè)命令會(huì)允許uWSGI服務(wù)器接收最大為32k的uwsgi包,再大的包就會(huì)被拒絕。

memory-report

enable memory usage report. This will print in the request log information about RSS and address space usage.

開啟內(nèi)存使用情況報(bào)告。這將打印請(qǐng)求相關(guān)的內(nèi)存和虛擬內(nèi)存的使用情況。

cgi-mode

開啟cgi模式。響應(yīng)將不再是HTTP可用的響應(yīng),而是cgi響應(yīng)(會(huì)增加Status:這個(gè)請(qǐng)求頭)

abstract-socket

chmod-socket or chmod

unix socket是個(gè)文件,所以會(huì)受到unix系統(tǒng)的權(quán)限限制。如果你的uwsgi客戶端沒有權(quán)限訪問uWSGI socket,你可以用這個(gè)選項(xiàng)設(shè)置unix socket的權(quán)限。

當(dāng)在xml配置文件中只是用這個(gè)選項(xiàng)作為一個(gè)標(biāo)識(shí)符,那么會(huì)將權(quán)限設(shè)為666,否則就是設(shè)置為指定的權(quán)限值。

這個(gè)配置會(huì)將socket文件的權(quán)限設(shè)為666

644

這個(gè)配置會(huì)將socket文件的權(quán)限設(shè)為644

freebind (Linux only)

允許綁定到一個(gè)不存在的網(wǎng)絡(luò)地址。

map-socket

當(dāng)你將一個(gè)uWSGI實(shí)例綁定到多個(gè)socket,你可以指定某些工作進(jìn)程到某些socket來提高服務(wù)質(zhì)量。

[uwsgi]

socket = /tmp/uwsgi0.sock

socket = /tmp/uwsgi1.sock

workers = 5

map-socket = 0:1,2,3

map-socket = 1:4,5

這個(gè)配置會(huì)使工作進(jìn)程1,2和3綁定到第一個(gè)socket,而工作進(jìn)程4和5綁定到第二個(gè)socket。

如果你讓多個(gè)app都由同一個(gè)uWSGI實(shí)例來處理,你可以很方便地為每一個(gè)app分配資源。

enable-threads

允許用內(nèi)嵌的語言啟動(dòng)線程。這將允許你在app程序中產(chǎn)生一個(gè)子線程。

single-interpreter

一些語言(比如python)有“多解釋器”的概念。他們?cè)试S在同一個(gè)進(jìn)程中獨(dú)立存在不同的app。如果你不想用這個(gè)特性,你可以使用該選項(xiàng)。

auto-procname

這個(gè)選項(xiàng)將自動(dòng)給uWSGI的進(jìn)程設(shè)置一些有意義的名字,例如“uWSGI master”, “uWSGI worker 1”, “uWSGI worker 2”。

procname-prefix

這個(gè)選項(xiàng)為進(jìn)程名指定前綴。

--procname-prefix

例如:

--procname-prefix test

那么,進(jìn)程名將變成“testuWSGI master”、“testuWSGI worker 1”、“testuWSGI worker 2”等,test與uWSGI之間是連在一起的,可讀性較差。

procname-prefix-spaced

用這個(gè)選項(xiàng)給進(jìn)程名指定前綴時(shí),前綴和進(jìn)程名之間有空格分隔。

--procname-prefix-spaced

例如:

--procname-prefix-spaced test

那么,進(jìn)程名將變成“test uWSGI master”、“test uWSGI worker 1”、“test uWSGI worker 2”等,比procname-prefix的可讀性好一點(diǎn)。

多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準(zhǔn)。

procname-append

這個(gè)選項(xiàng)為進(jìn)程名增加指定的后綴。

--procname-append

例如:

--procname-append test

那么,進(jìn)程名將變成“uWSGI mastertest”、“uWSGI worker 1test”、“uWSGI worker 2test”等,test與master或者1、2是連在一起的,可讀性也比較差。

多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準(zhǔn)。

procname

為進(jìn)程指定名字。

--procname

例如:

--procname test

那么,所有進(jìn)程的名字(包括主進(jìn)程和工作進(jìn)程)都變成了“test”。只能根據(jù)PPID來判斷哪個(gè)是主進(jìn)程(主進(jìn)程的PPID為1)。

注意,使用procname-prefix、procname-prefix-spaced以及procname-append都能在當(dāng)前選項(xiàng)修改生效的基礎(chǔ)上增加前綴和后綴。

多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準(zhǔn)。

procname-master

指定主進(jìn)程的名字。

--procname-master

例如:

--procname-master test

那么,主進(jìn)程的名字就變成了“test”。

注意,使用procname-prefix、procname-prefix-spaced以及procname-append都能在當(dāng)前選項(xiàng)修改生效的基礎(chǔ)上增加前綴和后綴。

多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準(zhǔn)。

另外,該選項(xiàng)將覆蓋procname對(duì)主進(jìn)程名字的修改。所有可以把procname和procname-master配合使用,達(dá)到修改所有進(jìn)程的名字的同時(shí)又能將主進(jìn)程和工作進(jìn)程區(qū)分開的效果。

master

啟動(dòng)主進(jìn)程。

emperor

開啟uWSGI的Emperor模式。

emperor-tyrant

開啟emperor的tyrant模式。見tyrant

emperor-stats or emperor-stats-server

為emperor模式開啟一個(gè)uWSGI的統(tǒng)計(jì)服務(wù)器。見stats server。

--emperor-stats

early-emperor

start the emperor before jailing and privileges drop

emperor-broodlord

為emperor開啟bloodlord模式。見broodlord。

emperor-amqp-vhost

set virtualhost name in AMQP emperor mode

emperor-amqp-username

set username name in AMQP emperor mode

emperor-amqp-password

set password name in AMQP emperor mode

emperor-throttle

set the number of milliseconds (default 1000) to wait before each vassal's fork()

vassals-start-hook

will be executed when the emperor starts the vassals

--vassals-start-hook

vassals-stop-hook

will be executed when the emperor stop the vassals

--vassals-stop-hook

auto-snapshot

UNKNOWN

--auto-snapshot1

reload-mercy

設(shè)置在平滑的重啟(直到接收到的請(qǐng)求處理完才重啟)一個(gè)工作子進(jìn)程中,等待這個(gè)工作結(jié)束的最長(zhǎng)秒數(shù)。

--reload-mercy8

這個(gè)配置會(huì)使在平滑地重啟工作子進(jìn)程中,如果工作進(jìn)程結(jié)束時(shí)間超過了8秒就會(huì)被強(qiáng)行結(jié)束(忽略之前已經(jīng)接收到的請(qǐng)求而直接結(jié)束)。

exit-on-reload

迫使在重啟過程中結(jié)束uWSGI的棧。這個(gè)選項(xiàng)只在某系特殊情況有用。

help or usage

打印幫助信息到標(biāo)準(zhǔn)輸出,然后退出。

reaper

開啟reaper模式。沒處理一個(gè)請(qǐng)求,服務(wù)器就會(huì)調(diào)用waitpid(-1)來清除所有的僵尸進(jìn)程。如果你在你的app中生成了子進(jìn)程,結(jié)束后又成為了很多僵尸進(jìn)程,那么你可以開啟這個(gè)選項(xiàng)。但遇到這種情況你更應(yīng)該修復(fù)你這種子進(jìn)程的使用方式(如果可以的話)。

max-requests

為每個(gè)工作進(jìn)程設(shè)置請(qǐng)求數(shù)的上限。當(dāng)一個(gè)工作進(jìn)程處理的請(qǐng)求數(shù)達(dá)到這個(gè)值,那么該工作進(jìn)程就會(huì)被回收重用(重啟)。你可以使用這個(gè)選項(xiàng)來默默地對(duì)抗內(nèi)存泄漏(盡管這類情況使用reload-on-as和reload-on-rss選項(xiàng)更有用)。

[uwsgi]max-requests =1000

上述配置設(shè)置工作進(jìn)程沒處理1000個(gè)請(qǐng)求就會(huì)被回收重用。

socket-timeout

為所有的socket操作設(shè)置內(nèi)部超時(shí)時(shí)間(默認(rèn)4秒)。

--socket-timeout10

這個(gè)配置會(huì)結(jié)束那些處于不活動(dòng)狀態(tài)超過10秒的連接。

locks

create locks for you to use. seelocks

創(chuàng)建n個(gè)鎖以供使用。見locks

--locks

sharedarea

這個(gè)選項(xiàng)將開啟SharedArea。這將允許一個(gè)比較低級(jí)的內(nèi)存共享。如果你希望用一個(gè)更好用更友好的共享系統(tǒng),可以看CachingFramework。

--sharedarea10

這個(gè)配置將創(chuàng)建一個(gè)10個(gè)頁的共享內(nèi)存區(qū)。

cache

開啟共享cache。見CachingFramework。

cache-blocksize

設(shè)置cache的塊大小,默認(rèn)為65536字節(jié)。最好設(shè)置為4096的倍數(shù)。

cache-store

開啟該選項(xiàng),使uWSGI的cache中的內(nèi)容能夠被長(zhǎng)久的保存。

cache-store-sync

設(shè)置msync()這個(gè)函數(shù)的調(diào)用頻率,調(diào)用msync()這個(gè)函數(shù)能夠?qū)ache中的內(nèi)容寫到磁盤上。

queue

UNDOCUMENTED

queue-blocksize

UNDOCUMENTED

queue-store

UNDOCUMENTED

queue-store-sync

UNDOCUMENTED

spooler

在指定的目錄下建立一個(gè)Spooler。

[uwsgi]

spooler = /home/foo/spooler

這個(gè)配置會(huì)將spooler文件保存到/home/foo/spooler directory目錄下。

spooler-chdir

這個(gè)選項(xiàng)允許你為每一個(gè)spooler任務(wù)定義一個(gè)公共的目錄。

--spooler-chdir

mule

增加一個(gè)mule進(jìn)程。見Mules

disable-logging

不記錄請(qǐng)求信息的日志。只記錄錯(cuò)誤以及uWSGI內(nèi)部消息到日志中。

pidfile

在失去權(quán)限前,將pid寫到指定的pidfile文件中。

pidfile2

在失去權(quán)限后,將pid寫到指定的pidfile文件中。

chroot

使用chroot()改變默認(rèn)目錄到指定目錄。

gid

在uWSGI服務(wù)器將要運(yùn)行的情況下,設(shè)置gid。

uid

在uWSGI服務(wù)器將要運(yùn)行的情況下,設(shè)置uid。

ini

設(shè)置ini配置文件的路徑。

--ini

yaml or yml

設(shè)置yaml配置文件的路徑。

--yaml

json

設(shè)置json格式的配置文件的路徑。

格式遵循的規(guī)則跟其他支持的配置格式一樣(支持正整數(shù),布爾數(shù)和數(shù)組):

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

為了使用JSON,你需要jansson庫(kù)。默認(rèn)情況下,會(huì)自動(dòng)檢測(cè)到庫(kù)的所在位置,但是你也可以buildconf或者默認(rèn)ini配置文件來指定。emperor已經(jīng)被擴(kuò)展支持.js文件了。

--json

ldap

從ldap服務(wù)器加載配置文件。見UseLdap(目前無文檔)。

ldap-schema

dump the LDAP schema (old-style format)

ldap-schema-ldif

dump the LDAP schema in LDIF format (new openldap)

no-server

初始化uWSGI服務(wù)器,然后當(dāng)初始化工作完成時(shí)立即結(jié)束(可以用來作測(cè)試)。

no-defer-accept

默認(rèn)情況下(這個(gè)配置有效的情況下)uWSGI會(huì)延遲調(diào)用accept()去獲取請(qǐng)求,直到客戶端發(fā)送請(qǐng)求數(shù)據(jù)過來(這種方法能夠提高性能和安全性)??梢允褂眠@個(gè)選項(xiàng)來禁用這個(gè)特性。

limit-as

通過使用POSIX/UNIX的setrlimit()函數(shù)來限制每個(gè)uWSGI進(jìn)程的虛擬內(nèi)存使用數(shù)。

--limit-as256

這個(gè)配置會(huì)限制uWSGI的進(jìn)程占用虛擬內(nèi)存不超過256M。如果虛擬內(nèi)存已經(jīng)達(dá)到256M,并繼續(xù)申請(qǐng)?zhí)摂M內(nèi)存則會(huì)使程序報(bào)內(nèi)存錯(cuò)誤,本次的http請(qǐng)求將返回500錯(cuò)誤。

英文文檔中還解釋了address space其實(shí)就是虛擬內(nèi)存。

在使用這個(gè)選項(xiàng)前先理解這個(gè)頁面的內(nèi)容:?http://en.wikipedia.org/wiki/Virtual_memory

reload-on-as

當(dāng)一個(gè)工作進(jìn)程的虛擬內(nèi)存占用超過了限制的大小,那么該進(jìn)程就會(huì)被回收重用(重啟)。

--reload-on-as128

這個(gè)配置會(huì)重啟所有占用虛擬內(nèi)存超過128M的工作進(jìn)程。當(dāng)工作進(jìn)程因此重啟時(shí),本次請(qǐng)求的響應(yīng)不會(huì)受影響,返回正常結(jié)果。

reload-on-rss

跟reload-on-as的效果類似,不過這個(gè)選項(xiàng)控制的是物理內(nèi)存。你可以同時(shí)使用這2個(gè)選項(xiàng):

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

這個(gè)配置會(huì)導(dǎo)致所有占用128M以上虛擬內(nèi)存或者超過96M物理內(nèi)存的工作進(jìn)程重啟。

當(dāng)工作進(jìn)程因此重啟時(shí),本次請(qǐng)求的響應(yīng)不會(huì)受影響,返回正常結(jié)果。

evil-reload-on-as

主進(jìn)程會(huì)重啟占用虛擬內(nèi)存超過M的工作進(jìn)程。

--evil-reload-on-as

evil-reload-on-rss

主要效果跟evil-reload-on-as一樣,但是這個(gè)選項(xiàng)控制的是非共享物理內(nèi)存。

--evil-reload-on-rss

log-x-forwarded-for

當(dāng)uWSGI運(yùn)行在多代理下時(shí),會(huì)將正確的客戶端IP打到日志中。

touch-reload

當(dāng)文件改變時(shí),優(yōu)雅的重啟uWSGI。

uwsgi:

? touch-reload: /tmp/reload.txt

如果你使用下面的命令:

touch /tmp/reload.txt

那么uWSGI服務(wù)器就會(huì)優(yōu)雅的重啟。

limit-post

限制HTTP請(qǐng)求體的大小。uWSGI通過CONTENT_LENGTH字段值來獲得請(qǐng)求體的大小。

--limit-post65536

將不允許請(qǐng)求體超過64k的請(qǐng)求。

no-orphans

在沒有主進(jìn)程的情況下自動(dòng)結(jié)束工作進(jìn)程。

prio

設(shè)置進(jìn)程的系統(tǒng)調(diào)度優(yōu)先級(jí)。

20

上述配置將設(shè)置進(jìn)程的優(yōu)先級(jí)為20(具體的值要根據(jù)不同的系統(tǒng)來設(shè)置)。

cpu-affinity

設(shè)置CPU的親和性(只對(duì)于Linux系統(tǒng))。見?http://lists.unbit.it/pipermail/uwsgi/2011-March/001594.html

post-buffering

開啟http請(qǐng)求體的緩存。uWSGI將所有大于限定大小的HTTP請(qǐng)求體保存到磁盤中。

[uwsgi]post-buffering =8192

上述配置會(huì)使uWSGI將所有大于8K的HTTP請(qǐng)求體都緩存到磁盤中。Rack應(yīng)用程序需要這個(gè)選項(xiàng),因?yàn)镽ack應(yīng)用程序需要一個(gè)可回退的輸入流。

post-buffering-bufsize

為post的緩存設(shè)置內(nèi)部的緩沖區(qū)大小。(這個(gè)分配的內(nèi)存是用來讀取socket流的字節(jié)塊)

post-buffering-bufsize65536

上述配置會(huì)使uWSGI分配一個(gè)64k的socket的recv()函數(shù)的緩存區(qū)。對(duì)一個(gè)128k的請(qǐng)求體來說,需要使用2個(gè)這樣的緩存區(qū)。

這是一個(gè)比較高級(jí)的選項(xiàng),你可能永遠(yuǎn)不會(huì)用到。

upload-progress

開啟嵌入的上傳進(jìn)度報(bào)告。你傳入一個(gè)uWSGI有寫權(quán)限的目錄,那么每一個(gè)上傳的JSON文件都會(huì)放到該目錄下,開啟這個(gè)選項(xiàng)后,就會(huì)報(bào)告當(dāng)前的上傳狀態(tài)。你可以使用ajax去讀取這些文件,所以配置好你的web服務(wù)器允許對(duì)該目錄的訪問。

--upload-progress /var/www/progress

用戶通過如下的url上傳一個(gè)文件。

http://uwsgi.it/upload?X-Progress-ID=550e8400-e29b-41d4-a716-446655440000

uWSGI在請(qǐng)求url中找到X-Progress-ID,然后在 /var/www/progress下創(chuàng)建一個(gè)文件:

550e8400-e29b-41d4-a716-446655440000.js

該文件的內(nèi)容如下:

{"state":"uploading","received":170000,"size":300000}

假設(shè)你已經(jīng)在你的web服務(wù)器中將/progress這個(gè)URI映射到了/var/www/progress這個(gè)目錄,那么你可以通過ajax pointing來獲得那些json數(shù)據(jù)。

/progress/550e8400-e29b-41d4-a716-446655440000.js

很可能你的web服務(wù)器已經(jīng)擁有一個(gè)相似的功能了,但是如果你需要改進(jìn)原有的功能(或者只是想有更多的控制),那么就將該功能委托給uWSGI服務(wù)器。

no-default-app

默認(rèn)情況下,當(dāng)uWSGI沒有找到SCRIPT_NAME指定的app時(shí),會(huì)使用默認(rèn)的app(大多數(shù)情況,默認(rèn)的app都位于/目錄下)。開啟這個(gè)選項(xiàng),在沒有可用的app時(shí)會(huì)返回一個(gè)錯(cuò)誤。

manage-script-name

如果因?yàn)槟承┰?,你的web服務(wù)器不能處理SCRIPT_NAME,你可以強(qiáng)制uWSGI自動(dòng)重建PATH_INFO。

udp

啟動(dòng)一個(gè)udp服務(wù)器,主要用在snmp或者為UdpLogging提供一個(gè)共享的打日志服務(wù)器。

multicast

內(nèi)部選項(xiàng),用于第三方插件。

cluster

加入指定的集群。見Clustering。

cluster-nodes

你可以得到一個(gè)集群里的節(jié)點(diǎn)列表,而不需要加入這個(gè)集群。

--cluster-nodes225.1.1.1:1717

使用上述選項(xiàng)能得到225.1.1.1:1717這個(gè)集群的所有節(jié)點(diǎn)。這個(gè)列表提供給uwsgi內(nèi)部均衡負(fù)載api用的。

cluster-reload

優(yōu)雅地重啟整個(gè)集群。

--cluster225.1.1.1:1717--cluster-reload

使用上述選項(xiàng)會(huì)重啟225.1.1.1:1717這個(gè)集群中的所有節(jié)點(diǎn)。

cluster-log

給一個(gè)集群的所有節(jié)點(diǎn)服務(wù)器發(fā)送一個(gè)日志信息。

--cluster225.1.1.1:1717--cluster-log"Hello World"

上述選項(xiàng)會(huì)在所有的節(jié)點(diǎn)日志文件中打印出"Hello World"

subscribe-to or st or subscribe

訂閱一個(gè)SubscriptionServer,你可以通過配置多次該選項(xiàng)來達(dá)到訂閱多個(gè)服務(wù)器的目的。

[uwsgi]subscribe-to =192.168.0.1:2626:unbit.itsubscribe-to =192.168.0.2:2626:uwsgi.it

shared-socket

一個(gè)高級(jí)選項(xiàng),插件作者會(huì)用到,或者用于一些特殊的需求。該選項(xiàng)允許服務(wù)器在啟動(dòng)早期創(chuàng)建一個(gè)socket,在失去特權(quán)或者被監(jiān)禁的時(shí)候依然能使用它。

snmp

啟動(dòng)一個(gè)SNMP服務(wù)器。見UseSnmp

snmp-community

set the snmp community string

check-interval

主進(jìn)程每秒都會(huì)進(jìn)行一次掃描。如果需要你可以加長(zhǎng)這個(gè)掃描時(shí)間。不建議。

binary-path

如果uWSGI的二進(jìn)制文件路徑?jīng)]有加到系統(tǒng)環(huán)境變量中,你可以使用這個(gè)選項(xiàng)強(qiáng)制改變二進(jìn)制的查找路徑,那么重載系統(tǒng)和Emperor都能輕易找到可執(zhí)行的二進(jìn)制文件。

async

開啟異步模式。見AsyncSupport。

logto

將日志打到一個(gè)指定的文件或者udp服務(wù)器。

logfile-chown

log-syslog

將日志打到系統(tǒng)日志上,而不再打到日志文件中。

傳入一個(gè)參數(shù),使uwsgi使用這個(gè)參數(shù)作為程序名,用在系統(tǒng)日志開始部分里。

--log-syslog mywebapp

log-master

委托主進(jìn)程來負(fù)責(zé)日志的寫操作(這將把所有的日志IO操作都放到一個(gè)進(jìn)程中)。對(duì)使用高級(jí)的IO調(diào)度策略的系統(tǒng)來說是很有用的。

logdate or log-date

在每一個(gè)日志行中都打印時(shí)間信息。你可以傳入一個(gè)strftime()格式的參數(shù),來格式化時(shí)間的格式。

log-zero

打印請(qǐng)求大小為0的請(qǐng)求。

log-slow

log-4xx

log-5xx

log-big

log-sendfile

log-micros

使用微秒作為日志中響應(yīng)時(shí)間的單位(默認(rèn)是毫秒)。

master-as-root

以root權(quán)限運(yùn)行uWSGI的主進(jìn)程。

chdir

在失去權(quán)限前,使用chdir()到指定目錄。

chdir2

在失去權(quán)限后,使用chdir()到指定目錄。

lazy

等每一個(gè)工作進(jìn)程都生成以后才加載應(yīng)用程序。

cheap

延遲啟動(dòng)工作進(jìn)程直到第一個(gè)請(qǐng)求到來。當(dāng)?shù)谝粋€(gè)請(qǐng)求來時(shí)就會(huì)啟動(dòng)預(yù)先設(shè)置個(gè)數(shù)的工作進(jìn)程。

如果沒有設(shè)置工作進(jìn)程數(shù),那么最多只會(huì)啟動(dòng)一個(gè)工作進(jìn)程。

cheaper

一個(gè)高階的cheap模式,這個(gè)選項(xiàng)將在啟動(dòng)的時(shí)候只分配n個(gè)工作進(jìn)程,并將使用多種算法來實(shí)現(xiàn)適應(yīng)性的進(jìn)程啟動(dòng)。

在啟動(dòng)的時(shí)候至少會(huì)分配一個(gè)工作進(jìn)程,即及時(shí)設(shè)置n為0,也會(huì)在最開始啟動(dòng)一個(gè)工作進(jìn)程。

如果當(dāng)前工作進(jìn)程不足以處理收到的請(qǐng)求,那么就會(huì)按請(qǐng)求量按需啟動(dòng)其他的工作進(jìn)程,直到工作進(jìn)程達(dá)到預(yù)先設(shè)置的個(gè)數(shù)。

如果沒有設(shè)置工作進(jìn)程數(shù),那么只會(huì)在剛啟動(dòng)的時(shí)候啟動(dòng)一個(gè)工作進(jìn)程,之后將不再啟動(dòng)其他進(jìn)程。

--cheaper

idle

在經(jīng)過秒的不活躍狀態(tài)后銷毀工作進(jìn)程(這時(shí)就進(jìn)入了cheap模式),只會(huì)剩下主進(jìn)程。

如果有cheaper選項(xiàng),那么就進(jìn)入cheaper模式,之后收到第一個(gè)請(qǐng)求就會(huì)啟動(dòng)工作進(jìn)程,啟動(dòng)的個(gè)數(shù)由cheaper選項(xiàng)里配置的n決定。

--idle

mount

允許同一個(gè)進(jìn)程加載多個(gè)app。

--mount /pinax=/var/www/pinax/deploy/pinax.wsgi

grunt

allows grunt processes

threads

開啟線程操作模式。你必須指定每個(gè)工作進(jìn)程的線程數(shù)。

--threads40--workers2

這個(gè)配置會(huì)導(dǎo)致生成2個(gè)工作進(jìn)程,每個(gè)工作進(jìn)程有40個(gè)子線程。

vhost

開啟虛擬主機(jī)模式。見VirtualHosting

vhost-host

默認(rèn)情況下,虛擬主機(jī)模式使用SERVER_NAME作為主機(jī)名的關(guān)鍵字。如果你希望使用HTTP_HOST,那就加這個(gè)選項(xiàng)。

check-static

uWSGI會(huì)在移交控制權(quán)給指定處理者之前檢查該選項(xiàng)指定的目錄。

uWSGI會(huì)檢查這個(gè)目錄,如果剛好請(qǐng)求的PATH_INFO有一個(gè)文件在這個(gè)目錄,那么uWSGI就會(huì)提供這個(gè)文件。

--check-static/var/www/example.com

使用上述配置,如果客戶端請(qǐng)求foo.png,而該文件又恰好存在于/var/www/example.com/foo.png,那么uWSGI就會(huì)直接用指定的方法提供這個(gè)文件(默認(rèn)是用sendfile ())。

static-map

映射一個(gè)資源到靜態(tài)文件區(qū)。

[uwsgi]static-map = /media=/var/www/django/contrib/admin/mediastatic-map = /images=/var/www/example.com/images

?無論什么時(shí)候一個(gè)PATH_INFO匹配到配置文件中的資源,uWSGI會(huì)直接用指定的方法提供這個(gè)文件(默認(rèn)是用sendfile ())。

static-index

在目錄索引中用到的靜態(tài)文件的文件名。

static-index = index.html

如果請(qǐng)求/doc/,那么uWSGI將檢查/doc/index.html,如果存在就會(huì)提供給客戶端。

file-serve-mode

設(shè)置靜態(tài)服務(wù)模式:

1.x-sendfile:將使用X-Sendfile頭(apache, Cherokee, lighttpd)

2.x-accel-redirect:將使用X-Accel-Redirect header(nginx)

3.default:使用sendfile()

--file-serve-mode x-sendfile

check-cache

檢查uWSGI cache中是否存在PATH_INFO指定的內(nèi)容,如果存在就提供該內(nèi)容。

close-on-exec

給uWSGI的socket設(shè)置close-on-exec標(biāo)識(shí),這將避免在一個(gè)請(qǐng)求中產(chǎn)生額外的進(jìn)程,來繼承socket文件的描述符。

mode

普通選項(xiàng),app可以使用uwsgi.mode來獲得這個(gè)選項(xiàng)值。

env

設(shè)置一個(gè)系統(tǒng)環(huán)境變量。

[uwsgi]

env = DJANGO_SETTINGS_MODULE=mysite.settings

這個(gè)配置將會(huì)設(shè)置一個(gè)環(huán)境變量DJANGO_SETTINGS_MODULE,它的值為mysite.settings

vacuum

當(dāng)服務(wù)器退出的時(shí)候自動(dòng)刪除unix socket文件和pid文件。

cgroup

run the server in cgroup (Linux only)

cgroup-opt

設(shè)置cgroup選項(xiàng)(僅限于Linux)

--cgroup-opt KEY=VAL

reuse-port(BSD only)

允許多個(gè)實(shí)例綁定到同一個(gè)地址。

loop

設(shè)置LoopEngine(高級(jí)選項(xiàng))

worker-exec

funny option to map a new executable to a uWSGI worker. You can run a php fastcgi server pool in this way

/usr/bin/uwsgi --workers4--worker-exec /usr/bin/php53-cgi

attach-daemon

給uWSGI主進(jìn)程附加一個(gè)進(jìn)程,并允許主進(jìn)程控制、監(jiān)控、重啟這個(gè)進(jìn)程。一個(gè)比較典型的使用是給主進(jìn)行附加一個(gè)memcached實(shí)例。

[uwsgi]master =trueattach-daemon = memcached

plugins

加載指定的插件。

--plugins psgi,greenlet

這個(gè)配置將加載psgi插件和greenlet插件。

allowed-modifiers

限制客戶端只能訪問modifiers的子集。

--allowed-modifiers0,111

這個(gè)配置將只允許客戶端訪問WSGI處理程序和cache處理程序。

remap-modifier

dump-options

打印所有可用的選項(xiàng),然后退出。

show-config

以ini文件格式打印當(dāng)前的配置。

print

將在解析配置文件的工程中打印一個(gè)字符串。

[uwsgi]

print = foo

將在服務(wù)器啟動(dòng)的時(shí)候打印"foo"。

version

打印出uWSGI的版本,然后退出。

wsgi-file or file[python plugin required]

加載指定的WSGI文件(與Graham的mod_wsgi形式兼容)

eval[python plugin required]

把計(jì)算一個(gè)字符串的值作為WSGI的入口。

def application(e, sr):? ? pass

module[python plugin required]

加載指定的python WSGI模塊(模塊路徑必須在PYTHONPATH里)

callable[python plugin required]

設(shè)置在收到請(qǐng)求時(shí),uWSGI加載的模塊中哪個(gè)變量將被調(diào)用,默認(rèn)是名字為“application”的變量。

test[python plugin required]

測(cè)試一個(gè)模塊是否能被成功的加載。

home or virtualenv or venv or pyhome[python plugin required]

為python程序設(shè)置指定的虛擬環(huán)境變量。

--virtualenv /apps/env001

使用在/apps/env001的虛擬環(huán)境變量。

pythonpath or python-path or pp[python plugin required]

給PYTHONPATH 增加一個(gè)目錄(或者一個(gè)egg),你可以最多使用該選項(xiàng)64次。

[uwsgi]

pp = myapp/lib

pp = trac.egg

pymodule-alias[python plugin required]

該選項(xiàng)允許python模塊的重映射。見PymoduleAlias。

pyargv[python plugin required]

set the python sys.argv

設(shè)置python的系統(tǒng)參數(shù)(sys.argv)

--pyargv"one two three"

該配置會(huì)將sys.argv 設(shè)為('one','two','three')。

optimize

設(shè)置python為最優(yōu)化級(jí)別(要小心)

paste

use paste.deploy to load a WSGI app

使用paste.deploy 來加載一個(gè)WSGI程序。

uwsgi --paste config:/foo/development.ini

ini-paste

ini和paste這2個(gè)選項(xiàng)的簡(jiǎn)化,在文件解析完之后,將使用同樣的文件作為paste.deploy的配置文件。

ini-paste-logged

load a paste.deploy config file containing uwsgi section (load loggers too)

catch-exceptions

在你的瀏覽器中打印出traceback信息,而不是在日志文件中(不要在實(shí)際產(chǎn)品中使用這個(gè)選項(xiàng))。

ignore-script-name

pep3333-input

reload-os-env

no-site[python plugin required]

不加載python的site.py模塊。

ping[ping plugin required]

工具性的選項(xiàng)。ping一個(gè)uwsgi服務(wù)器,如果ping成功,難么進(jìn)程就會(huì)退出,并返回0,否則返回一個(gè)大于0的值。

/usr/bin/uwsgi --ping192.168.0.100:1717

將ping在192.168.0.100:1717的uWSGI服務(wù)器。

ping-timeout[ping plugin required]

設(shè)置ping的超時(shí)時(shí)間(默認(rèn)是3秒)。ping的等待時(shí)間超過指定的秒數(shù)后就認(rèn)為該uWSGI實(shí)例已失效。

/usr/bin/uwsgi --ping192.168.0.100:1717--ping-timeout10

將設(shè)置ping的超時(shí)時(shí)間為10秒。

nagios

作nagios檢查。

fastrouter

Run the fastrouter (it is a uwsgi proxy/load balancer) on specific address

在指定的地址上運(yùn)行fastrouter(這是一個(gè)uwsgi的代理、負(fù)載均衡)。

[uwsgi]fastrouter =127.0.0.1:3017

在127.0.0.1:3017這個(gè)地址上運(yùn)行fastrouter

fastrouter-use-cache

check the uwsgi cache to get hostname:address mapping

fastrouter-use-pattern

use a filesystem pattern to get hostname:address mapping

fastrouter-use-base

fastrouter-events

limit the max number of async events the fastrouter can return in one cycle

fastrouter-subscription-server

add aSubscriptionServerto the fastrouter to build the hostname:address map

fastrouter-timeout

設(shè)置fastrouter的內(nèi)部超時(shí)時(shí)間。

http

開啟嵌入的http服務(wù)器、路由、網(wǎng)關(guān)、負(fù)載均衡、代理。

http-var

http-to

http-modifier1

http-use-cache

http-use-pattern

http-use-base

http-use-cluster

http-events

http-subscription-server

enable theSubscriptionServerfor clustering and massive hosting/load-balancing

http-timeout

設(shè)置內(nèi)部http的socket超時(shí)時(shí)間。

ugreen [ugreen plugin required]

enable uGreen as suspend/resume engine. SeeuGreen

ugreen-stacksize [ugreen plugin required]

set the stack size foruGreen

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)習(xí) Flask,寫完一個(gè) Flask 應(yīng)用需要部署的時(shí)候,就想著折騰自己的服務(wù)器。根據(jù)搜索的教程照做,對(duì)于原理一...
    Cocoa_Coder閱讀 17,349評(píng)論 4 56
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 談?wù)揥EB編程的時(shí)候常說天天在寫CGI,那么CGI是什么呢?可能很多時(shí)候并不會(huì)去深究這些基礎(chǔ)概念,再比如除了CGI...
    __七把刀__閱讀 2,304評(píng)論 2 11
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,270評(píng)論 0 5
  • 說在前頭 專業(yè)的壓力管理培訓(xùn)課程,我選擇——微信搜索公眾號(hào)講師約(微信號(hào):china_jsy) 我的壓力從何而來?...
    scho閱讀 287評(píng)論 0 0

友情鏈接更多精彩內(nèi)容