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)吃力。
當(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àn)在我們開始。
指定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端口。
設(shè)置默認(rèn)的通信協(xié)議(uwsgi,http,fastcgi)
--protocol
為預(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)程
這個(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)求。
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的額外信息。
set the harakiri mode for spooler tasks
為spooler任務(wù)設(shè)置harakiri模式
--spooler-harakiri option
為mule進(jìn)程設(shè)置harakiri模式
--mule-harakiri
加載指定的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配置文件。
設(shè)置一個(gè)占位符
--setKEY=VALUE
使進(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。
發(fā)送一個(gè)SIGINT信號(hào)給文件中的pid標(biāo)識(shí)的uWSGI
--stop
發(fā)送一個(gè)SIGHUP信號(hào)給文件中的pid標(biāo)識(shí)的uWSGI
--reload
設(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)核。
設(shè)置uwsgi客戶端能夠傳遞給uwsgi的變量的最大數(shù)量值。這只是一個(gè)安全相關(guān)的值,大多數(shù)情況下你是不需要設(shè)置它的。
設(shè)置用于uwsgi包解析的內(nèi)部緩存區(qū)大小。默認(rèn)是4k。
如果你打算接受一個(gè)擁有很多請(qǐng)求頭的大請(qǐng)求,你可以增加這個(gè)值到64k。
--buffer-size32768
這個(gè)命令會(huì)允許uWSGI服務(wù)器接收最大為32k的uwsgi包,再大的包就會(huì)被拒絕。
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模式。響應(yīng)將不再是HTTP可用的響應(yīng),而是cgi響應(yīng)(會(huì)增加Status:這個(gè)請(qǐng)求頭)
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
允許綁定到一個(gè)不存在的網(wǎng)絡(luò)地址。
當(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分配資源。
允許用內(nèi)嵌的語言啟動(dòng)線程。這將允許你在app程序中產(chǎn)生一個(gè)子線程。
一些語言(比如python)有“多解釋器”的概念。他們?cè)试S在同一個(gè)進(jìn)程中獨(dú)立存在不同的app。如果你不想用這個(gè)特性,你可以使用該選項(xiàng)。
這個(gè)選項(xiàng)將自動(dòng)給uWSGI的進(jìn)程設(shè)置一些有意義的名字,例如“uWSGI master”, “uWSGI worker 1”, “uWSGI worker 2”。
這個(gè)選項(xiàng)為進(jìn)程名指定前綴。
--procname-prefix
例如:
--procname-prefix test
那么,進(jìn)程名將變成“testuWSGI master”、“testuWSGI worker 1”、“testuWSGI worker 2”等,test與uWSGI之間是連在一起的,可讀性較差。
用這個(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)。
這個(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)。
為進(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)。
指定主進(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ū)分開的效果。
啟動(dòng)主進(jìn)程。
開啟uWSGI的Emperor模式。
開啟emperor的tyrant模式。見tyrant。
emperor-stats or emperor-stats-server
為emperor模式開啟一個(gè)uWSGI的統(tǒng)計(jì)服務(wù)器。見stats server。
--emperor-stats
start the emperor before jailing and privileges drop
為emperor開啟bloodlord模式。見broodlord。
set virtualhost name in AMQP emperor mode
set username name in AMQP emperor mode
set password name in AMQP emperor mode
set the number of milliseconds (default 1000) to wait before each vassal's fork()
will be executed when the emperor starts the vassals
--vassals-start-hook
will be executed when the emperor stop the vassals
--vassals-stop-hook
UNKNOWN
--auto-snapshot1
設(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é)束)。
迫使在重啟過程中結(jié)束uWSGI的棧。這個(gè)選項(xiàng)只在某系特殊情況有用。
打印幫助信息到標(biāo)準(zhǔn)輸出,然后退出。
開啟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)程的使用方式(如果可以的話)。
為每個(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操作設(shè)置內(nèi)部超時(shí)時(shí)間(默認(rèn)4秒)。
--socket-timeout10
這個(gè)配置會(huì)結(jié)束那些處于不活動(dòng)狀態(tài)超過10秒的連接。
create locks for you to use. seelocks
創(chuàng)建n個(gè)鎖以供使用。見locks。
--locks
這個(gè)選項(xiàng)將開啟SharedArea。這將允許一個(gè)比較低級(jí)的內(nèi)存共享。如果你希望用一個(gè)更好用更友好的共享系統(tǒng),可以看CachingFramework。
--sharedarea10
這個(gè)配置將創(chuàng)建一個(gè)10個(gè)頁的共享內(nèi)存區(qū)。
開啟共享cache。見CachingFramework。
設(shè)置cache的塊大小,默認(rèn)為65536字節(jié)。最好設(shè)置為4096的倍數(shù)。
開啟該選項(xiàng),使uWSGI的cache中的內(nèi)容能夠被長(zhǎng)久的保存。
設(shè)置msync()這個(gè)函數(shù)的調(diào)用頻率,調(diào)用msync()這個(gè)函數(shù)能夠?qū)ache中的內(nèi)容寫到磁盤上。
UNDOCUMENTED
UNDOCUMENTED
UNDOCUMENTED
UNDOCUMENTED
在指定的目錄下建立一個(gè)Spooler。
[uwsgi]
spooler = /home/foo/spooler
這個(gè)配置會(huì)將spooler文件保存到/home/foo/spooler directory目錄下。
這個(gè)選項(xiàng)允許你為每一個(gè)spooler任務(wù)定義一個(gè)公共的目錄。
--spooler-chdir
增加一個(gè)mule進(jìn)程。見Mules。
不記錄請(qǐng)求信息的日志。只記錄錯(cuò)誤以及uWSGI內(nèi)部消息到日志中。
在失去權(quán)限前,將pid寫到指定的pidfile文件中。
在失去權(quán)限后,將pid寫到指定的pidfile文件中。
使用chroot()改變默認(rèn)目錄到指定目錄。
在uWSGI服務(wù)器將要運(yùn)行的情況下,設(shè)置gid。
在uWSGI服務(wù)器將要運(yùn)行的情況下,設(shè)置uid。
設(shè)置ini配置文件的路徑。
--ini
設(shè)置yaml配置文件的路徑。
--yaml
設(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服務(wù)器加載配置文件。見UseLdap(目前無文檔)。
dump the LDAP schema (old-style format)
dump the LDAP schema in LDIF format (new openldap)
初始化uWSGI服務(wù)器,然后當(dāng)初始化工作完成時(shí)立即結(jié)束(可以用來作測(cè)試)。
默認(rèn)情況下(這個(gè)配置有效的情況下)uWSGI會(huì)延遲調(diào)用accept()去獲取請(qǐng)求,直到客戶端發(fā)送請(qǐng)求數(shù)據(jù)過來(這種方法能夠提高性能和安全性)??梢允褂眠@個(gè)選項(xiàng)來禁用這個(gè)特性。
通過使用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
當(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-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é)果。
主進(jìn)程會(huì)重啟占用虛擬內(nèi)存超過M的工作進(jìn)程。
--evil-reload-on-as
主要效果跟evil-reload-on-as一樣,但是這個(gè)選項(xiàng)控制的是非共享物理內(nèi)存。
--evil-reload-on-rss
當(dāng)uWSGI運(yùn)行在多代理下時(shí),會(huì)將正確的客戶端IP打到日志中。
當(dāng)文件改變時(shí),優(yōu)雅的重啟uWSGI。
uwsgi:
? touch-reload: /tmp/reload.txt
如果你使用下面的命令:
touch /tmp/reload.txt
那么uWSGI服務(wù)器就會(huì)優(yōu)雅的重啟。
限制HTTP請(qǐng)求體的大小。uWSGI通過CONTENT_LENGTH字段值來獲得請(qǐng)求體的大小。
--limit-post65536
將不允許請(qǐng)求體超過64k的請(qǐng)求。
在沒有主進(jìn)程的情況下自動(dòng)結(jié)束工作進(jìn)程。
設(shè)置進(jìn)程的系統(tǒng)調(diào)度優(yōu)先級(jí)。
20
上述配置將設(shè)置進(jìn)程的優(yōu)先級(jí)為20(具體的值要根據(jù)不同的系統(tǒng)來設(shè)置)。
設(shè)置CPU的親和性(只對(duì)于Linux系統(tǒng))。見?http://lists.unbit.it/pipermail/uwsgi/2011-March/001594.html
開啟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的緩存設(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ì)用到。
開啟嵌入的上傳進(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ù)器。
默認(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ò)誤。
如果因?yàn)槟承┰?,你的web服務(wù)器不能處理SCRIPT_NAME,你可以強(qiáng)制uWSGI自動(dòng)重建PATH_INFO。
啟動(dòng)一個(gè)udp服務(wù)器,主要用在snmp或者為UdpLogging提供一個(gè)共享的打日志服務(wù)器。
內(nèi)部選項(xiàng),用于第三方插件。
加入指定的集群。見Clustering。
你可以得到一個(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用的。
優(yōu)雅地重啟整個(gè)集群。
--cluster225.1.1.1:1717--cluster-reload
使用上述選項(xiàng)會(huì)重啟225.1.1.1:1717這個(gè)集群中的所有節(jié)點(diǎn)。
給一個(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
一個(gè)高級(jí)選項(xiàng),插件作者會(huì)用到,或者用于一些特殊的需求。該選項(xiàng)允許服務(wù)器在啟動(dòng)早期創(chuàng)建一個(gè)socket,在失去特權(quán)或者被監(jiān)禁的時(shí)候依然能使用它。
啟動(dòng)一個(gè)SNMP服務(wù)器。見UseSnmp
set the snmp community string
主進(jìn)程每秒都會(huì)進(jìn)行一次掃描。如果需要你可以加長(zhǎng)這個(gè)掃描時(shí)間。不建議。
如果uWSGI的二進(jìn)制文件路徑?jīng)]有加到系統(tǒng)環(huán)境變量中,你可以使用這個(gè)選項(xiàng)強(qiáng)制改變二進(jìn)制的查找路徑,那么重載系統(tǒng)和Emperor都能輕易找到可執(zhí)行的二進(jìn)制文件。
開啟異步模式。見AsyncSupport。
將日志打到一個(gè)指定的文件或者udp服務(wù)器。
將日志打到系統(tǒng)日志上,而不再打到日志文件中。
傳入一個(gè)參數(shù),使uwsgi使用這個(gè)參數(shù)作為程序名,用在系統(tǒng)日志開始部分里。
--log-syslog mywebapp
委托主進(jìn)程來負(fù)責(zé)日志的寫操作(這將把所有的日志IO操作都放到一個(gè)進(jìn)程中)。對(duì)使用高級(jí)的IO調(diào)度策略的系統(tǒng)來說是很有用的。
在每一個(gè)日志行中都打印時(shí)間信息。你可以傳入一個(gè)strftime()格式的參數(shù),來格式化時(shí)間的格式。
打印請(qǐng)求大小為0的請(qǐng)求。
使用微秒作為日志中響應(yīng)時(shí)間的單位(默認(rèn)是毫秒)。
以root權(quán)限運(yùn)行uWSGI的主進(jìn)程。
在失去權(quán)限前,使用chdir()到指定目錄。
在失去權(quán)限后,使用chdir()到指定目錄。
等每一個(gè)工作進(jìn)程都生成以后才加載應(yīng)用程序。
延遲啟動(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)程。
一個(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
在經(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
允許同一個(gè)進(jìn)程加載多個(gè)app。
--mount /pinax=/var/www/pinax/deploy/pinax.wsgi
allows grunt processes
開啟線程操作模式。你必須指定每個(gè)工作進(jìn)程的線程數(shù)。
--threads40--workers2
這個(gè)配置會(huì)導(dǎo)致生成2個(gè)工作進(jìn)程,每個(gè)工作進(jìn)程有40個(gè)子線程。
開啟虛擬主機(jī)模式。見VirtualHosting
默認(rèn)情況下,虛擬主機(jī)模式使用SERVER_NAME作為主機(jī)名的關(guān)鍵字。如果你希望使用HTTP_HOST,那就加這個(gè)選項(xiàng)。
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 ())。
映射一個(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 ())。
在目錄索引中用到的靜態(tài)文件的文件名。
static-index = index.html
如果請(qǐng)求/doc/,那么uWSGI將檢查/doc/index.html,如果存在就會(huì)提供給客戶端。
設(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
檢查uWSGI cache中是否存在PATH_INFO指定的內(nèi)容,如果存在就提供該內(nèi)容。
給uWSGI的socket設(shè)置close-on-exec標(biāo)識(shí),這將避免在一個(gè)請(qǐng)求中產(chǎn)生額外的進(jìn)程,來繼承socket文件的描述符。
普通選項(xiàng),app可以使用uwsgi.mode來獲得這個(gè)選項(xiàng)值。
設(shè)置一個(gè)系統(tǒng)環(huán)境變量。
[uwsgi]
env = DJANGO_SETTINGS_MODULE=mysite.settings
這個(gè)配置將會(huì)設(shè)置一個(gè)環(huán)境變量DJANGO_SETTINGS_MODULE,它的值為mysite.settings
當(dāng)服務(wù)器退出的時(shí)候自動(dòng)刪除unix socket文件和pid文件。
run the server in cgroup (Linux only)
設(shè)置cgroup選項(xiàng)(僅限于Linux)
--cgroup-opt KEY=VAL
reuse-port(BSD only)
允許多個(gè)實(shí)例綁定到同一個(gè)地址。
設(shè)置LoopEngine(高級(jí)選項(xiàng))
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
給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 psgi,greenlet
這個(gè)配置將加載psgi插件和greenlet插件。
限制客戶端只能訪問modifiers的子集。
--allowed-modifiers0,111
這個(gè)配置將只允許客戶端訪問WSGI處理程序和cache處理程序。
打印所有可用的選項(xiàng),然后退出。
以ini文件格式打印當(dāng)前的配置。
將在解析配置文件的工程中打印一個(gè)字符串。
[uwsgi]
print = foo
將在服務(wù)器啟動(dòng)的時(shí)候打印"foo"。
打印出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')。
設(shè)置python為最優(yōu)化級(jí)別(要小心)
use paste.deploy to load a WSGI app
使用paste.deploy 來加載一個(gè)WSGI程序。
uwsgi --paste config:/foo/development.ini
ini和paste這2個(gè)選項(xiàng)的簡(jiǎn)化,在文件解析完之后,將使用同樣的文件作為paste.deploy的配置文件。
load a paste.deploy config file containing uwsgi section (load loggers too)
在你的瀏覽器中打印出traceback信息,而不是在日志文件中(不要在實(shí)際產(chǎn)品中使用這個(gè)選項(xiàng))。
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檢查。
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
check the uwsgi cache to get hostname:address mapping
use a filesystem pattern to get hostname:address mapping
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
設(shè)置fastrouter的內(nèi)部超時(shí)時(shí)間。
開啟嵌入的http服務(wù)器、路由、網(wǎng)關(guān)、負(fù)載均衡、代理。
enable theSubscriptionServerfor clustering and massive hosting/load-balancing
設(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