uWSGI參考資料(1.0版本的配置選項列表)
下面的內(nèi)容包含了大部分uWSGI的配置選項,這些配置選項的列舉沒有特定的順序。每一個選項都可以使用在任何一種支持的配置方式里(如命令行參數(shù)、環(huán)境變量、xml文件、ini文件、yaml格式文件以及LDAP)。有些選項的使用需要某些插件的支持,這些插件的名字都會在文檔里有說明。
文檔中的例子使用了多種形式的配置方式來讓使用者更好的理解uwsgi的工作方式。
如果你剛開始接觸uWSGI,你最好是先看一下快速開始和例子,這些對實際使用過程的中的一些選項做了舉例說明,另外下面列舉的非常多的配置選項說明對于新手的閱讀可能有一點吃力。
當使用某一種配置風格或者將一種風格轉(zhuǎn)換另一個風格時,需要注意一下規(guī)則:
命令行參數(shù)(command line args):需要給選項增加“--”前綴
例如socket選項:
--socket
環(huán)境變量(environment variable):選項名都要換成大寫,并且加上“UWSGI_”前綴,所有原來選項名中的“-”都要換成下劃線“_”
例如max-vars選項將變成:
UWSGI_MAX_VARS=""
xml文件:xml文件中的根結(jié)點應(yīng)該是,所有的選項值是作為文本節(jié)點。標識符類型的選項可以沒有對應(yīng)的值。
socket選項和master選項可以如下配置:
127.0.0.1:3031
ini文件:配置域應(yīng)該是uwsgi,標識符類型的選項的值可以設(shè)為true或者1。
socket選項和master選項可以如下配置:
[uwsgi]socket =127.0.0.1:3031master =true
yaml格式文件:根元素需要設(shè)置為uwsgi,標識符類型的選項的值可以設(shè)為true或者1。
socket選項和master選項可以如下配置:
uwsgi:? socket:127.0.0.1master:1
lda格式:這個格式比較復雜,你應(yīng)該查閱專門的wiki文檔。見useLDAP。
深呼吸,現(xiàn)在我們開始。
指定uwsgi的客戶端將要連接的socket的路徑(使用UNIX socket的情況)或者地址(使用網(wǎng)絡(luò)地址的情況)。你最多可以同時指定8個socket選項。當使用命令行變量時,可以使用“-s”這個縮寫。
--socket /tmp/uwsgi.sock
以上配置將會綁定到 /tmp/uwsgi.sock 指定的UNIX socket
-s127.0.0.1:1717
以上配置會綁定到ipv4地址127.0.0.1的1717端口
[uwsgi]socket =127.0.0.1:1717socket =127.0.0.1:2626
以上配置會綁定到ipv4地址127.0.0.1的1717端口以及ipv4地址127.0.0.1的2626端口。
設(shè)置默認的通信協(xié)議(uwsgi,http,fastcgi)
--protocol
為預先派生模式設(shè)置工作進程的數(shù)量。這個設(shè)置是你的app能實現(xiàn)簡單并且安全的并發(fā)能力的基礎(chǔ)。你設(shè)置的工作進程越多,你就能越快的處理請求。每一個工作進程都等同于一個系統(tǒng)進程,它消耗內(nèi)存,所以需要小心設(shè)置工作進程的數(shù)量。如果你設(shè)置的數(shù)量太多,就有可能是系統(tǒng)崩潰。
當你使用命令行參數(shù)時,你可以使用簡化命令“-p”
--processes8
以上配置會產(chǎn)生8個工作進程
--workers4
以上配置會產(chǎn)生4個工作進程
-p8
以上會產(chǎn)生8個工作進程
3
這個配置會產(chǎn)生3個工作進程
這個選項會設(shè)置harakiri超時時間(可以看wiki首頁的相關(guān)內(nèi)容)。如果一個請求花費的時間超過了這個harakiri超時時間,那么這個請求都會被丟棄,并且當前處理這個請求的工作進程會被回收再利用(即重啟)。
--harakiri60
這個設(shè)置會使uwsgi丟棄所有需要60秒才能處理完成的請求。
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)
當一個請求被harakiri殺掉以后,你將在uWSGI日志中得到一條消息。激活這個選項會打印出額外的信息(例如,在linux中會打印出當前的syscall)。
--harakiri-verbose
以上配置會開啟harakiri的額外信息。
set the harakiri mode for spooler tasks
為spooler任務(wù)設(shè)置harakiri模式
--spooler-harakiri option
為mule進程設(shè)置harakiri模式
--mule-harakiri
加載指定的xml配置文件。當使用命令行參數(shù)時,可以使用簡化命令“-x”。在xml配置文件中,你可以有多個“”節(jié),不同的節(jié)之間用id屬性區(qū)分。通過在文件名后面增加id(使用冒號分隔)來選擇應(yīng)用哪個“”節(jié)。
--xml /etc/myapp.xml
以上配置會加載/etc/myapp.xml這個配置文件。
--xml /etc/myapp.xml:django
以上命令會使用/etc/myapp.xml這個配置文件中的“django”這個節(jié)作為配置選項
這個文件內(nèi)容可以像如下這樣:
/tmp/tg.sock/tmp/django.sock>
這種情況下,根節(jié)點可以是任何你想要的名字(這就允許你可以將uwsgi這個配置節(jié)加到其他xml文件中)
如果在命令行的最后一個參數(shù)以“.xml”結(jié)尾,那么就隱含將加載該xml文件作為配置。
/usr/bin/uwsgi /etc/myapp.xml
以上命令會使uWSGI自動加載 /etc/myapp.xml配置文件。
設(shè)置一個占位符
--setKEY=VALUE
使進程在后臺運行,并將日志打到指定的日志文件或者udp服務(wù)器
--daemonize /var/log/uwsgi.log
這個指令會讓uWSGI在后臺運行并將日志打到 /var/log/uwsgi.log文件中。
[uwsgi]daemonize =192.168.0.100:4000
這個配置將會使uWSGI在后臺運行,并且將日志消息發(fā)送給監(jiān)聽192.168.0.100:4000這個地址的udp服務(wù)器。見UdpLogging。
發(fā)送一個SIGINT信號給文件中的pid標識的uWSGI
--stop
發(fā)送一個SIGHUP信號給文件中的pid標識的uWSGI
--reload
設(shè)置socket的監(jiān)聽隊列大小(默認:100)。
每一個socket都有一個相關(guān)聯(lián)的隊列,請求會被放入其中等待進程來處理。當這個隊列慢的時候,新來的請求就會被拒絕。
隊列大小的最大值依賴于系統(tǒng)內(nèi)核。
設(shè)置uwsgi客戶端能夠傳遞給uwsgi的變量的最大數(shù)量值。這只是一個安全相關(guān)的值,大多數(shù)情況下你是不需要設(shè)置它的。
設(shè)置用于uwsgi包解析的內(nèi)部緩存區(qū)大小。默認是4k。
如果你打算接受一個擁有很多請求頭的大請求,你可以增加這個值到64k。
--buffer-size32768
這個命令會允許uWSGI服務(wù)器接收最大為32k的uwsgi包,再大的包就會被拒絕。
enable memory usage report. This will print in the request log information about RSS and address space usage.
開啟內(nèi)存使用情況報告。這將打印請求相關(guān)的內(nèi)存和虛擬內(nèi)存的使用情況。
開啟cgi模式。響應(yīng)將不再是HTTP可用的響應(yīng),而是cgi響應(yīng)(會增加Status:這個請求頭)
unix socket是個文件,所以會受到unix系統(tǒng)的權(quán)限限制。如果你的uwsgi客戶端沒有權(quán)限訪問uWSGI socket,你可以用這個選項設(shè)置unix socket的權(quán)限。
當在xml配置文件中只是用這個選項作為一個標識符,那么會將權(quán)限設(shè)為666,否則就是設(shè)置為指定的權(quán)限值。
這個配置會將socket文件的權(quán)限設(shè)為666
644
這個配置會將socket文件的權(quán)限設(shè)為644
允許綁定到一個不存在的網(wǎng)絡(luò)地址。
當你將一個uWSGI實例綁定到多個socket,你可以指定某些工作進程到某些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
這個配置會使工作進程1,2和3綁定到第一個socket,而工作進程4和5綁定到第二個socket。
如果你讓多個app都由同一個uWSGI實例來處理,你可以很方便地為每一個app分配資源。
允許用內(nèi)嵌的語言啟動線程。這將允許你在app程序中產(chǎn)生一個子線程。
一些語言(比如python)有“多解釋器”的概念。他們允許在同一個進程中獨立存在不同的app。如果你不想用這個特性,你可以使用該選項。
這個選項將自動給uWSGI的進程設(shè)置一些有意義的名字,例如“uWSGI master”, “uWSGI worker 1”, “uWSGI worker 2”。
這個選項為進程名指定前綴。
--procname-prefix
例如:
--procname-prefix test
那么,進程名將變成“testuWSGI master”、“testuWSGI worker 1”、“testuWSGI worker 2”等,test與uWSGI之間是連在一起的,可讀性較差。
用這個選項給進程名指定前綴時,前綴和進程名之間有空格分隔。
--procname-prefix-spaced
例如:
--procname-prefix-spaced test
那么,進程名將變成“test uWSGI master”、“test uWSGI worker 1”、“test uWSGI worker 2”等,比procname-prefix的可讀性好一點。
多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準。
這個選項為進程名增加指定的后綴。
--procname-append
例如:
--procname-append test
那么,進程名將變成“uWSGI mastertest”、“uWSGI worker 1test”、“uWSGI worker 2test”等,test與master或者1、2是連在一起的,可讀性也比較差。
多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準。
為進程指定名字。
--procname
例如:
--procname test
那么,所有進程的名字(包括主進程和工作進程)都變成了“test”。只能根據(jù)PPID來判斷哪個是主進程(主進程的PPID為1)。
注意,使用procname-prefix、procname-prefix-spaced以及procname-append都能在當前選項修改生效的基礎(chǔ)上增加前綴和后綴。
多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準。
指定主進程的名字。
--procname-master
例如:
--procname-master test
那么,主進程的名字就變成了“test”。
注意,使用procname-prefix、procname-prefix-spaced以及procname-append都能在當前選項修改生效的基礎(chǔ)上增加前綴和后綴。
多次使用,后一次使用將覆蓋前一次,即以最后一次使用為準。
另外,該選項將覆蓋procname對主進程名字的修改。所有可以把procname和procname-master配合使用,達到修改所有進程的名字的同時又能將主進程和工作進程區(qū)分開的效果。
啟動主進程。
開啟uWSGI的Emperor模式。
開啟emperor的tyrant模式。見tyrant。
emperor-stats or emperor-stats-server
為emperor模式開啟一個uWSGI的統(tǒng)計服務(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è)置在平滑的重啟(直到接收到的請求處理完才重啟)一個工作子進程中,等待這個工作結(jié)束的最長秒數(shù)。
--reload-mercy8
這個配置會使在平滑地重啟工作子進程中,如果工作進程結(jié)束時間超過了8秒就會被強行結(jié)束(忽略之前已經(jīng)接收到的請求而直接結(jié)束)。
迫使在重啟過程中結(jié)束uWSGI的棧。這個選項只在某系特殊情況有用。
打印幫助信息到標準輸出,然后退出。
開啟reaper模式。沒處理一個請求,服務(wù)器就會調(diào)用waitpid(-1)來清除所有的僵尸進程。如果你在你的app中生成了子進程,結(jié)束后又成為了很多僵尸進程,那么你可以開啟這個選項。但遇到這種情況你更應(yīng)該修復你這種子進程的使用方式(如果可以的話)。
為每個工作進程設(shè)置請求數(shù)的上限。當一個工作進程處理的請求數(shù)達到這個值,那么該工作進程就會被回收重用(重啟)。你可以使用這個選項來默默地對抗內(nèi)存泄漏(盡管這類情況使用reload-on-as和reload-on-rss選項更有用)。
[uwsgi]max-requests =1000
上述配置設(shè)置工作進程沒處理1000個請求就會被回收重用。
為所有的socket操作設(shè)置內(nèi)部超時時間(默認4秒)。
--socket-timeout10
這個配置會結(jié)束那些處于不活動狀態(tài)超過10秒的連接。
create locks for you to use. seelocks
創(chuàng)建n個鎖以供使用。見locks。
--locks
這個選項將開啟SharedArea。這將允許一個比較低級的內(nèi)存共享。如果你希望用一個更好用更友好的共享系統(tǒng),可以看CachingFramework。
--sharedarea10
這個配置將創(chuàng)建一個10個頁的共享內(nèi)存區(qū)。
開啟共享cache。見CachingFramework。
設(shè)置cache的塊大小,默認為65536字節(jié)。最好設(shè)置為4096的倍數(shù)。
開啟該選項,使uWSGI的cache中的內(nèi)容能夠被長久的保存。
設(shè)置msync()這個函數(shù)的調(diào)用頻率,調(diào)用msync()這個函數(shù)能夠?qū)ache中的內(nèi)容寫到磁盤上。
UNDOCUMENTED
UNDOCUMENTED
UNDOCUMENTED
UNDOCUMENTED
在指定的目錄下建立一個Spooler。
[uwsgi]
spooler = /home/foo/spooler
這個配置會將spooler文件保存到/home/foo/spooler directory目錄下。
這個選項允許你為每一個spooler任務(wù)定義一個公共的目錄。
--spooler-chdir
增加一個mule進程。見Mules。
不記錄請求信息的日志。只記錄錯誤以及uWSGI內(nèi)部消息到日志中。
在失去權(quán)限前,將pid寫到指定的pidfile文件中。
在失去權(quán)限后,將pid寫到指定的pidfile文件中。
使用chroot()改變默認目錄到指定目錄。
在uWSGI服務(wù)器將要運行的情況下,設(shè)置gid。
在uWSGI服務(wù)器將要運行的情況下,設(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庫。默認情況下,會自動檢測到庫的所在位置,但是你也可以buildconf或者默認ini配置文件來指定。emperor已經(jīng)被擴展支持.js文件了。
--json
從ldap服務(wù)器加載配置文件。見UseLdap(目前無文檔)。
dump the LDAP schema (old-style format)
dump the LDAP schema in LDIF format (new openldap)
初始化uWSGI服務(wù)器,然后當初始化工作完成時立即結(jié)束(可以用來作測試)。
默認情況下(這個配置有效的情況下)uWSGI會延遲調(diào)用accept()去獲取請求,直到客戶端發(fā)送請求數(shù)據(jù)過來(這種方法能夠提高性能和安全性)。可以使用這個選項來禁用這個特性。
通過使用POSIX/UNIX的setrlimit()函數(shù)來限制每個uWSGI進程的虛擬內(nèi)存使用數(shù)。
--limit-as256
這個配置會限制uWSGI的進程占用虛擬內(nèi)存不超過256M。如果虛擬內(nèi)存已經(jīng)達到256M,并繼續(xù)申請?zhí)摂M內(nèi)存則會使程序報內(nèi)存錯誤,本次的http請求將返回500錯誤。
英文文檔中還解釋了address space其實就是虛擬內(nèi)存。
在使用這個選項前先理解這個頁面的內(nèi)容:?http://en.wikipedia.org/wiki/Virtual_memory
當一個工作進程的虛擬內(nèi)存占用超過了限制的大小,那么該進程就會被回收重用(重啟)。
--reload-on-as128
這個配置會重啟所有占用虛擬內(nèi)存超過128M的工作進程。當工作進程因此重啟時,本次請求的響應(yīng)不會受影響,返回正常結(jié)果。
跟reload-on-as的效果類似,不過這個選項控制的是物理內(nèi)存。你可以同時使用這2個選項:
uwsgi:? reload-on-as:128reload-on-rss:96
這個配置會導致所有占用128M以上虛擬內(nèi)存或者超過96M物理內(nèi)存的工作進程重啟。
當工作進程因此重啟時,本次請求的響應(yīng)不會受影響,返回正常結(jié)果。
主進程會重啟占用虛擬內(nèi)存超過M的工作進程。
--evil-reload-on-as
主要效果跟evil-reload-on-as一樣,但是這個選項控制的是非共享物理內(nèi)存。
--evil-reload-on-rss
當uWSGI運行在多代理下時,會將正確的客戶端IP打到日志中。
當文件改變時,優(yōu)雅的重啟uWSGI。
uwsgi:
? touch-reload: /tmp/reload.txt
如果你使用下面的命令:
touch /tmp/reload.txt
那么uWSGI服務(wù)器就會優(yōu)雅的重啟。
限制HTTP請求體的大小。uWSGI通過CONTENT_LENGTH字段值來獲得請求體的大小。
--limit-post65536
將不允許請求體超過64k的請求。
在沒有主進程的情況下自動結(jié)束工作進程。
設(shè)置進程的系統(tǒng)調(diào)度優(yōu)先級。
20
上述配置將設(shè)置進程的優(yōu)先級為20(具體的值要根據(jù)不同的系統(tǒng)來設(shè)置)。
設(shè)置CPU的親和性(只對于Linux系統(tǒng))。見?http://lists.unbit.it/pipermail/uwsgi/2011-March/001594.html
開啟http請求體的緩存。uWSGI將所有大于限定大小的HTTP請求體保存到磁盤中。
[uwsgi]post-buffering =8192
上述配置會使uWSGI將所有大于8K的HTTP請求體都緩存到磁盤中。Rack應(yīng)用程序需要這個選項,因為Rack應(yīng)用程序需要一個可回退的輸入流。
為post的緩存設(shè)置內(nèi)部的緩沖區(qū)大小。(這個分配的內(nèi)存是用來讀取socket流的字節(jié)塊)
post-buffering-bufsize65536
上述配置會使uWSGI分配一個64k的socket的recv()函數(shù)的緩存區(qū)。對一個128k的請求體來說,需要使用2個這樣的緩存區(qū)。
這是一個比較高級的選項,你可能永遠不會用到。
開啟嵌入的上傳進度報告。你傳入一個uWSGI有寫權(quán)限的目錄,那么每一個上傳的JSON文件都會放到該目錄下,開啟這個選項后,就會報告當前的上傳狀態(tài)。你可以使用ajax去讀取這些文件,所以配置好你的web服務(wù)器允許對該目錄的訪問。
--upload-progress /var/www/progress
用戶通過如下的url上傳一個文件。
http://uwsgi.it/upload?X-Progress-ID=550e8400-e29b-41d4-a716-446655440000
uWSGI在請求url中找到X-Progress-ID,然后在 /var/www/progress下創(chuàng)建一個文件:
550e8400-e29b-41d4-a716-446655440000.js
該文件的內(nèi)容如下:
{"state":"uploading","received":170000,"size":300000}
假設(shè)你已經(jīng)在你的web服務(wù)器中將/progress這個URI映射到了/var/www/progress這個目錄,那么你可以通過ajax pointing來獲得那些json數(shù)據(jù)。
/progress/550e8400-e29b-41d4-a716-446655440000.js
很可能你的web服務(wù)器已經(jīng)擁有一個相似的功能了,但是如果你需要改進原有的功能(或者只是想有更多的控制),那么就將該功能委托給uWSGI服務(wù)器。
默認情況下,當uWSGI沒有找到SCRIPT_NAME指定的app時,會使用默認的app(大多數(shù)情況,默認的app都位于/目錄下)。開啟這個選項,在沒有可用的app時會返回一個錯誤。
如果因為某些原因,你的web服務(wù)器不能處理SCRIPT_NAME,你可以強制uWSGI自動重建PATH_INFO。
啟動一個udp服務(wù)器,主要用在snmp或者為UdpLogging提供一個共享的打日志服務(wù)器。
內(nèi)部選項,用于第三方插件。
加入指定的集群。見Clustering。
你可以得到一個集群里的節(jié)點列表,而不需要加入這個集群。
--cluster-nodes225.1.1.1:1717
使用上述選項能得到225.1.1.1:1717這個集群的所有節(jié)點。這個列表提供給uwsgi內(nèi)部均衡負載api用的。
優(yōu)雅地重啟整個集群。
--cluster225.1.1.1:1717--cluster-reload
使用上述選項會重啟225.1.1.1:1717這個集群中的所有節(jié)點。
給一個集群的所有節(jié)點服務(wù)器發(fā)送一個日志信息。
--cluster225.1.1.1:1717--cluster-log"Hello World"
上述選項會在所有的節(jié)點日志文件中打印出"Hello World"
subscribe-to or st or subscribe
訂閱一個SubscriptionServer,你可以通過配置多次該選項來達到訂閱多個服務(wù)器的目的。
[uwsgi]subscribe-to =192.168.0.1:2626:unbit.itsubscribe-to =192.168.0.2:2626:uwsgi.it
一個高級選項,插件作者會用到,或者用于一些特殊的需求。該選項允許服務(wù)器在啟動早期創(chuàng)建一個socket,在失去特權(quán)或者被監(jiān)禁的時候依然能使用它。
啟動一個SNMP服務(wù)器。見UseSnmp
set the snmp community string
主進程每秒都會進行一次掃描。如果需要你可以加長這個掃描時間。不建議。
如果uWSGI的二進制文件路徑?jīng)]有加到系統(tǒng)環(huán)境變量中,你可以使用這個選項強制改變二進制的查找路徑,那么重載系統(tǒng)和Emperor都能輕易找到可執(zhí)行的二進制文件。
開啟異步模式。見AsyncSupport。
將日志打到一個指定的文件或者udp服務(wù)器。
將日志打到系統(tǒng)日志上,而不再打到日志文件中。
傳入一個參數(shù),使uwsgi使用這個參數(shù)作為程序名,用在系統(tǒng)日志開始部分里。
--log-syslog mywebapp
委托主進程來負責日志的寫操作(這將把所有的日志IO操作都放到一個進程中)。對使用高級的IO調(diào)度策略的系統(tǒng)來說是很有用的。
在每一個日志行中都打印時間信息。你可以傳入一個strftime()格式的參數(shù),來格式化時間的格式。
打印請求大小為0的請求。
使用微秒作為日志中響應(yīng)時間的單位(默認是毫秒)。
以root權(quán)限運行uWSGI的主進程。
在失去權(quán)限前,使用chdir()到指定目錄。
在失去權(quán)限后,使用chdir()到指定目錄。
等每一個工作進程都生成以后才加載應(yīng)用程序。
延遲啟動工作進程直到第一個請求到來。當?shù)谝粋€請求來時就會啟動預先設(shè)置個數(shù)的工作進程。
如果沒有設(shè)置工作進程數(shù),那么最多只會啟動一個工作進程。
一個高階的cheap模式,這個選項將在啟動的時候只分配n個工作進程,并將使用多種算法來實現(xiàn)適應(yīng)性的進程啟動。
在啟動的時候至少會分配一個工作進程,即及時設(shè)置n為0,也會在最開始啟動一個工作進程。
如果當前工作進程不足以處理收到的請求,那么就會按請求量按需啟動其他的工作進程,直到工作進程達到預先設(shè)置的個數(shù)。
如果沒有設(shè)置工作進程數(shù),那么只會在剛啟動的時候啟動一個工作進程,之后將不再啟動其他進程。
--cheaper
在經(jīng)過秒的不活躍狀態(tài)后銷毀工作進程(這時就進入了cheap模式),只會剩下主進程。
如果有cheaper選項,那么就進入cheaper模式,之后收到第一個請求就會啟動工作進程,啟動的個數(shù)由cheaper選項里配置的n決定。
--idle
允許同一個進程加載多個app。
--mount /pinax=/var/www/pinax/deploy/pinax.wsgi
allows grunt processes
開啟線程操作模式。你必須指定每個工作進程的線程數(shù)。
--threads40--workers2
這個配置會導致生成2個工作進程,每個工作進程有40個子線程。
開啟虛擬主機模式。見VirtualHosting
默認情況下,虛擬主機模式使用SERVER_NAME作為主機名的關(guān)鍵字。如果你希望使用HTTP_HOST,那就加這個選項。
uWSGI會在移交控制權(quán)給指定處理者之前檢查該選項指定的目錄。
uWSGI會檢查這個目錄,如果剛好請求的PATH_INFO有一個文件在這個目錄,那么uWSGI就會提供這個文件。
--check-static/var/www/example.com
使用上述配置,如果客戶端請求foo.png,而該文件又恰好存在于/var/www/example.com/foo.png,那么uWSGI就會直接用指定的方法提供這個文件(默認是用sendfile ())。
映射一個資源到靜態(tài)文件區(qū)。
[uwsgi]static-map = /media=/var/www/django/contrib/admin/mediastatic-map = /images=/var/www/example.com/images
?無論什么時候一個PATH_INFO匹配到配置文件中的資源,uWSGI會直接用指定的方法提供這個文件(默認是用sendfile ())。
在目錄索引中用到的靜態(tài)文件的文件名。
static-index = index.html
如果請求/doc/,那么uWSGI將檢查/doc/index.html,如果存在就會提供給客戶端。
設(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標識,這將避免在一個請求中產(chǎn)生額外的進程,來繼承socket文件的描述符。
普通選項,app可以使用uwsgi.mode來獲得這個選項值。
設(shè)置一個系統(tǒng)環(huán)境變量。
[uwsgi]
env = DJANGO_SETTINGS_MODULE=mysite.settings
這個配置將會設(shè)置一個環(huán)境變量DJANGO_SETTINGS_MODULE,它的值為mysite.settings
當服務(wù)器退出的時候自動刪除unix socket文件和pid文件。
run the server in cgroup (Linux only)
設(shè)置cgroup選項(僅限于Linux)
--cgroup-opt KEY=VAL
reuse-port(BSD only)
允許多個實例綁定到同一個地址。
設(shè)置LoopEngine(高級選項)
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主進程附加一個進程,并允許主進程控制、監(jiān)控、重啟這個進程。一個比較典型的使用是給主進行附加一個memcached實例。
[uwsgi]master =trueattach-daemon = memcached
加載指定的插件。
--plugins psgi,greenlet
這個配置將加載psgi插件和greenlet插件。
限制客戶端只能訪問modifiers的子集。
--allowed-modifiers0,111
這個配置將只允許客戶端訪問WSGI處理程序和cache處理程序。
打印所有可用的選項,然后退出。
以ini文件格式打印當前的配置。
將在解析配置文件的工程中打印一個字符串。
[uwsgi]
print = foo
將在服務(wù)器啟動的時候打印"foo"。
打印出uWSGI的版本,然后退出。
wsgi-file or file[python plugin required]
加載指定的WSGI文件(與Graham的mod_wsgi形式兼容)
eval[python plugin required]
把計算一個字符串的值作為WSGI的入口。
def application(e, sr):? ? pass
module[python plugin required]
加載指定的python WSGI模塊(模塊路徑必須在PYTHONPATH里)
callable[python plugin required]
設(shè)置在收到請求時,uWSGI加載的模塊中哪個變量將被調(diào)用,默認是名字為“application”的變量。
test[python plugin required]
測試一個模塊是否能被成功的加載。
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 增加一個目錄(或者一個egg),你可以最多使用該選項64次。
[uwsgi]
pp = myapp/lib
pp = trac.egg
pymodule-alias[python plugin required]
該選項允許python模塊的重映射。見PymoduleAlias。
pyargv[python plugin required]
set the python sys.argv
設(shè)置python的系統(tǒng)參數(shù)(sys.argv)
--pyargv"one two three"
該配置會將sys.argv 設(shè)為('one','two','three')。
設(shè)置python為最優(yōu)化級別(要小心)
use paste.deploy to load a WSGI app
使用paste.deploy 來加載一個WSGI程序。
uwsgi --paste config:/foo/development.ini
ini和paste這2個選項的簡化,在文件解析完之后,將使用同樣的文件作為paste.deploy的配置文件。
load a paste.deploy config file containing uwsgi section (load loggers too)
在你的瀏覽器中打印出traceback信息,而不是在日志文件中(不要在實際產(chǎn)品中使用這個選項)。
no-site[python plugin required]
不加載python的site.py模塊。
ping[ping plugin required]
工具性的選項。ping一個uwsgi服務(wù)器,如果ping成功,難么進程就會退出,并返回0,否則返回一個大于0的值。
/usr/bin/uwsgi --ping192.168.0.100:1717
將ping在192.168.0.100:1717的uWSGI服務(wù)器。
ping-timeout[ping plugin required]
設(shè)置ping的超時時間(默認是3秒)。ping的等待時間超過指定的秒數(shù)后就認為該uWSGI實例已失效。
/usr/bin/uwsgi --ping192.168.0.100:1717--ping-timeout10
將設(shè)置ping的超時時間為10秒。
作nagios檢查。
Run the fastrouter (it is a uwsgi proxy/load balancer) on specific address
在指定的地址上運行fastrouter(這是一個uwsgi的代理、負載均衡)。
[uwsgi]fastrouter =127.0.0.1:3017
在127.0.0.1:3017這個地址上運行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)部超時時間。
開啟嵌入的http服務(wù)器、路由、網(wǎng)關(guān)、負載均衡、代理。
enable theSubscriptionServerfor clustering and massive hosting/load-balancing
設(shè)置內(nèi)部http的socket超時時間。
ugreen [ugreen plugin required]
enable uGreen as suspend/resume engine. SeeuGreen
ugreen-stacksize [ugreen plugin required]
set the stack size foruGreen