uWSGI參考資料(1.0版本的配置選項列表)
下面的內容包含了大部分uWSGI的配置選項,這些配置選項的列舉沒有特定的順序。每一個選項都可以使用在任何一種支持的配置方式裏(如命令行參數、環境變量、xml文件、ini文件、yaml格式文件以及LDAP)。有些選項的使用需要某些插件的支持,這些插件的名字都會在文檔裏有說明。
文檔中的例子使用了多種形式的配置方式來讓使用者更好的理解uwsgi的工作方式。
如果你剛開始接觸uWSGI,你最好是先看一下快速開始 和 例子 ,這些對實際使用過程的中的一些選項做了舉例說明,另外下面列舉的非常多的配置選項說明對於新手的閱讀可能有一點吃力。
配置風格的簡單介紹
當使用某一種配置風格或者將一種風格轉換另一個風格時,需要注意一下規則:
命令行參數(command line args):需要給選項增加“--”前綴
例如socket選項:
--socket <path/address>
環境變量(environment variable):選項名都要換成大寫,並且加上“UWSGI_”前綴,所有原來選項名中的“-”都要換成下劃線“_”
例如max-vars選項將變成:
UWSGI_MAX_VARS="<n>"
xml文件:xml文件中的根結點應該是<uwsgi>,所有的選項值是作爲文本節點。標識符類型的選項可以沒有對應的值。
socket選項和master選項可以如下配置:
<uwsgi> <socket>127.0.0.1:3031</socket> <master/> </uwsgi>
ini文件:配置域應該是uwsgi,標識符類型的選項的值可以設爲true或者1。
socket選項和master選項可以如下配置:
[uwsgi] socket = 127.0.0.1:3031 master = true
yaml格式文件:根元素需要設置爲uwsgi,標識符類型的選項的值可以設爲true或者1。
socket選項和master選項可以如下配置:
uwsgi: socket: 127.0.0.1 master: 1
lda格式:這個格式比較複雜,你應該查閱專門的wiki文檔。見useLDAP。
無盡的選項列表...
深呼吸,現在我們開始。
socket or uwsgi-socket
指定uwsgi的客戶端將要連接的socket的路徑(使用UNIX socket的情況)或者地址(使用網絡地址的情況)。你最多可以同時指定8個socket選項。當使用命令行變量時,可以使用“-s”這個縮寫。
--socket /tmp/uwsgi.sock
以上配置將會綁定到 /tmp/uwsgi.sock 指定的UNIX socket
-s 127.0.0.1:1717
以上配置會綁定到ipv4地址127.0.0.1的1717端口
[uwsgi] socket = 127.0.0.1:1717 socket = 127.0.0.1:2626
以上配置會綁定到ipv4地址127.0.0.1的1717端口以及ipv4地址127.0.0.1的2626端口。
protocol
設置默認的通信協議(uwsgi,http,fastcgi)
--protocol <protocol>
processes or workers
爲預先派生模式設置工作進程的數量。這個設置是你的app能實現簡單並且安全的併發能力的基礎。你設置的工作進程越多,你就能越快的處理請求。每一個工作進程都等同於一個系統進程,它消耗內存,所以需要小心設置工作進程的數量。如果你設置的數量太多,就有可能是系統崩潰。
當你使用命令行參數時,你可以使用簡化命令“-p”
--processes 8
以上配置會產生8個工作進程
--workers 4
以上配置會產生4個工作進程
-p 8
以上會產生8個工作進程
<uwsgi> <workers>3</workers> </uwsgi>
這個配置會產生3個工作進程
harakiri
這個選項會設置harakiri超時時間(可以看wiki首頁的相關內容)。如果一個請求花費的時間超過了這個harakiri超時時間,那麼這個請求都會被丟棄,並且當前處理這個請求的工作進程會被回收再利用(即重啓)。
--harakiri 60
這個設置會使uwsgi丟棄所有需要60秒才能處理完成的請求。
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)
當一個請求被harakiri殺掉以後,你將在uWSGI日誌中得到一條消息。激活這個選項會打印出額外的信息(例如,在linux中會打印出當前的syscall)。
--harakiri-verbose
以上配置會開啓harakiri的額外信息。
spooler-harakiri
set the harakiri mode for spooler tasks
爲spooler任務設置harakiri模式
--spooler-harakiri <n> option
mule-harakiri
爲mule進程設置harakiri模式
--mule-harakiri <n>
xmlconfig or xml
加載指定的xml配置文件。當使用命令行參數時,可以使用簡化命令“-x”。在xml配置文件中,你可以有多個“<uwsgi>”節,不同的節之間用id屬性區分。通過在文件名後面增加id(使用冒號分隔)來選擇應用哪個“<uwsgi>”節。
--xml /etc/myapp.xml
以上配置會加載/etc/myapp.xml這個配置文件。
--xml /etc/myapp.xml:django
以上命令會使用/etc/myapp.xml這個配置文件中的“django”這個節作爲配置選項
這個文件內容可以像如下這樣:
<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配置文件。
set
設置一個佔位符
--set KEY=VALUE
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服務器。見UdpLogging。
stop
發送一個SIGINT信號給<pidfile>文件中的pid標識的uWSGI
--stop <pidfile>
reload
發送一個SIGHUP信號給<pidfile>文件中的pid標識的uWSGI
--reload <pidfile>
listen
設置socket的監聽隊列大小(默認:100)。
每一個socket都有一個相關聯的隊列,請求會被放入其中等待進程來處理。當這個隊列慢的時候,新來的請求就會被拒絕。
隊列大小的最大值依賴於系統內核。
max-vars
設置uwsgi客戶端能夠傳遞給uwsgi的變量的最大數量值。這只是一個安全相關的值,大多數情況下你是不需要設置它的。
buffer-size
設置用於uwsgi包解析的內部緩存區大小。默認是4k。
如果你打算接受一個擁有很多請求頭的大請求,你可以增加這個值到64k。
--buffer-size 32768
這個命令會允許uWSGI服務器接收最大爲32k的uwsgi包,再大的包就會被拒絕。
memory-report
enable memory usage report. This will print in the request log information about RSS and address space usage.
開啓內存使用情況報告。這將打印請求相關的內存和虛擬內存的使用情況。
<uwsgi> <memory-report/> </uwsgi>
cgi-mode
開啓cgi模式。響應將不再是HTTP可用的響應,而是cgi響應(會增加Status:這個請求頭)
abstract-socket
chmod-socket or 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
freebind (Linux only)
允許綁定到一個不存在的網絡地址。
map-socket
當你將一個uWSGI實例綁定到多個socket,你可以指定某些工作進程到某些socket來提高服務質量。
[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分配資源。
enable-threads
允許用內嵌的語言啓動線程。這將允許你在app程序中產生一個子線程。
single-interpreter
一些語言(比如python)有“多解釋器”的概念。他們允許在同一個進程中獨立存在不同的app。如果你不想用這個特性,你可以使用該選項。
auto-procname
這個選項將自動給uWSGI的進程設置一些有意義的名字,例如“uWSGI master”, “uWSGI worker 1”, “uWSGI worker 2”。
procname-prefix
這個選項爲進程名指定前綴。
--procname-prefix <value>
例如:
--procname-prefix test
那麼,進程名將變成“testuWSGI master”、“testuWSGI worker 1”、“testuWSGI worker 2”等,test與uWSGI之間是連在一起的,可讀性較差。
procname-prefix-spaced
用這個選項給進程名指定前綴時,前綴和進程名之間有空格分隔。
--procname-prefix-spaced <value>
例如:
--procname-prefix-spaced test
那麼,進程名將變成“test uWSGI master”、“test uWSGI worker 1”、“test uWSGI worker 2”等,比procname-prefix的可讀性好一點。
多次使用,後一次使用將覆蓋前一次,即以最後一次使用爲準。
procname-append
這個選項爲進程名增加指定的後綴。
--procname-append <value>
例如:
--procname-append test
那麼,進程名將變成“uWSGI mastertest”、“uWSGI worker 1test”、“uWSGI worker 2test”等,test與master或者1、2是連在一起的,可讀性也比較差。
多次使用,後一次使用將覆蓋前一次,即以最後一次使用爲準。
procname
爲進程指定名字。
--procname <value>
例如:
--procname test
那麼,所有進程的名字(包括主進程和工作進程)都變成了“test”。只能根據PPID來判斷哪個是主進程(主進程的PPID爲1)。
注意,使用procname-prefix、procname-prefix-spaced以及procname-append都能在當前選項修改生效的基礎上增加前綴和後綴。
多次使用,後一次使用將覆蓋前一次,即以最後一次使用爲準。
procname-master
指定主進程的名字。
--procname-master <value>
例如:
--procname-master test
那麼,主進程的名字就變成了“test”。
注意,使用procname-prefix、procname-prefix-spaced以及procname-append都能在當前選項修改生效的基礎上增加前綴和後綴。
多次使用,後一次使用將覆蓋前一次,即以最後一次使用爲準。
另外,該選項將覆蓋procname對主進程名字的修改。所有可以把procname和procname-master配合使用,達到修改所有進程的名字的同時又能將主進程和工作進程區分開的效果。
master
啓動主進程。
emperor
開啓uWSGI的Emperor模式。
emperor-tyrant
開啓emperor的tyrant模式。見tyrant。
emperor-stats or emperor-stats-server
爲emperor模式開啓一個uWSGI的統計服務器。見stats server。
--emperor-stats <addr>
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
<filename> will be executed when the emperor starts the vassals
--vassals-start-hook <filename>
vassals-stop-hook
<filename> will be executed when the emperor stop the vassals
--vassals-stop-hook <filename>
auto-snapshot
UNKNOWN
--auto-snapshot 1
reload-mercy
設置在平滑的重啓(直到接收到的請求處理完才重啓)一個工作子進程中,等待這個工作結束的最長秒數。
--reload-mercy 8
這個配置會使在平滑地重啓工作子進程中,如果工作進程結束時間超過了8秒就會被強行結束(忽略之前已經接收到的請求而直接結束)。
exit-on-reload
迫使在重啓過程中結束uWSGI的棧。這個選項只在某系特殊情況有用。
help or usage
打印幫助信息到標準輸出,然後退出。
reaper
開啓reaper模式。沒處理一個請求,服務器就會調用waitpid(-1)來清除所有的殭屍進程。如果你在你的app中生成了子進程,結束後又成爲了很多殭屍進程,那麼你可以開啓這個選項。但遇到這種情況你更應該修復你這種子進程的使用方式(如果可以的話)。
max-requests
爲每個工作進程設置請求數的上限。當一個工作進程處理的請求數達到這個值,那麼該工作進程就會被回收重用(重啓)。你可以使用這個選項來默默地對抗內存泄漏(儘管這類情況使用reload-on-as和reload-on-rss選項更有用)。
[uwsgi]
max-requests = 1000
上述配置設置工作進程沒處理1000個請求就會被回收重用。
socket-timeout
爲所有的socket操作設置內部超時時間(默認4秒)。
--socket-timeout 10
這個配置會結束那些處於不活動狀態超過10秒的連接。
locks
create <n> locks for you to use. see locks
創建n個鎖以供使用。見locks。
--locks <n>
sharedarea
這個選項將開啓SharedArea。這將允許一個比較低級的內存共享。如果你希望用一個更好用更友好的共享系統,可以看CachingFramework。
--sharedarea 10
這個配置將創建一個10個頁的共享內存區。
cache
開啓共享cache。見CachingFramework。
cache-blocksize
設置cache的塊大小,默認爲65536字節。最好設置爲4096的倍數。
cache-store
開啓該選項,使uWSGI的cache中的內容能夠被長久的保存。
cache-store-sync
設置msync()這個函數的調用頻率,調用msync()這個函數能夠將cache中的內容寫到磁盤上。
queue
UNDOCUMENTED
queue-blocksize
UNDOCUMENTED
queue-store
UNDOCUMENTED
queue-store-sync
UNDOCUMENTED
spooler
在指定的目錄下建立一個Spooler。
[uwsgi] spooler = /home/foo/spooler
這個配置會將spooler文件保存到/home/foo/spooler directory目錄下。
spooler-chdir
這個選項允許你爲每一個spooler任務定義一個公共的目錄。
--spooler-chdir <directory>
mule
增加一個mule進程。見Mules。
disable-logging
不記錄請求信息的日誌。只記錄錯誤以及uWSGI內部消息到日誌中。
pidfile
在失去權限前,將pid寫到指定的pidfile文件中。
pidfile2
在失去權限後,將pid寫到指定的pidfile文件中。
chroot
使用chroot()改變默認目錄到指定目錄。
gid
在uWSGI服務器將要運行的情況下,設置gid。
uid
在uWSGI服務器將要運行的情況下,設置uid。
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配置文件來指定。emperor已經被擴展支持.js文件了。
--json <jsonfile>
ldap
從ldap服務器加載配置文件。見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服務器,然後當初始化工作完成時立即結束(可以用來作測試)。
no-defer-accept
默認情況下(這個配置有效的情況下)uWSGI會延遲調用accept()去獲取請求,直到客戶端發送請求數據過來(這種方法能夠提高性能和安全性)。可以使用這個選項來禁用這個特性。
limit-as
通過使用POSIX/UNIX的setrlimit()函數來限制每個uWSGI進程的虛擬內存使用數。
--limit-as 256
這個配置會限制uWSGI的進程佔用虛擬內存不超過256M。如果虛擬內存已經達到256M,並繼續申請虛擬內存則會使程序報內存錯誤,本次的http請求將返回500錯誤。
英文文檔中還解釋了address space其實就是虛擬內存。
在使用這個選項前先理解這個頁面的內容: http://en.wikipedia.org/wiki/Virtual_memory
reload-on-as
當一個工作進程的虛擬內存佔用超過了限制的大小,那麼該進程就會被回收重用(重啓)。
--reload-on-as 128
這個配置會重啓所有佔用虛擬內存超過128M的工作進程。當工作進程因此重啓時,本次請求的響應不會受影響,返回正常結果。
reload-on-rss
跟reload-on-as的效果類似,不過這個選項控制的是物理內存。你可以同時使用這2個選項:
uwsgi: reload-on-as: 128 reload-on-rss: 96
這個配置會導致所有佔用128M以上虛擬內存或者超過96M物理內存的工作進程重啓。
當工作進程因此重啓時,本次請求的響應不會受影響,返回正常結果。
evil-reload-on-as
主進程會重啓佔用虛擬內存超過<n>M的工作進程。
--evil-reload-on-as <n>
evil-reload-on-rss
主要效果跟evil-reload-on-as一樣,但是這個選項控制的是非共享物理內存。
--evil-reload-on-rss <n>
log-x-forwarded-for
當uWSGI運行在多代理下時,會將正確的客戶端IP打到日誌中。
touch-reload
當文件改變時,優雅的重啓uWSGI。
uwsgi: touch-reload: /tmp/reload.txt
如果你使用下面的命令:
touch /tmp/reload.txt
那麼uWSGI服務器就會優雅的重啓。
limit-post
限制HTTP請求體的大小。uWSGI通過CONTENT_LENGTH字段值來獲得請求體的大小。
--limit-post 65536
將不允許請求體超過64k的請求。
no-orphans
在沒有主進程的情況下自動結束工作進程。
prio
設置進程的系統調度優先級。
<uwsgi> <prio>20</prio> </uwsgi>
cpu-affinity
設置CPU的親和性(只對於Linux系統)。見 http://lists.unbit.it/pipermail/uwsgi/2011-March/001594.html
post-buffering
開啓http請求體的緩存。uWSGI將所有大於限定大小的HTTP請求體保存到磁盤中。
[uwsgi]
post-buffering = 8192
上述配置會使uWSGI將所有大於8K的HTTP請求體都緩存到磁盤中。Rack應用程序需要這個選項,因爲Rack應用程序需要一個可回退的輸入流。
post-buffering-bufsize
爲post的緩存設置內部的緩衝區大小。(這個分配的內存是用來讀取socket流的字節塊)
post-buffering-bufsize 65536
上述配置會使uWSGI分配一個64k的socket的recv()函數的緩存區。對一個128k的請求體來說,需要使用2個這樣的緩存區。
這是一個比較高級的選項,你可能永遠不會用到。
upload-progress
開啓嵌入的上傳進度報告。你傳入一個uWSGI有寫權限的目錄,那麼每一個上傳的JSON文件都會放到該目錄下,開啓這個選項後,就會報告當前的上傳狀態。你可以使用ajax去讀取這些文件,所以配置好你的web服務器允許對該目錄的訪問。
--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下創建一個文件:
550e8400-e29b-41d4-a716-446655440000.js
該文件的內容如下:
{ "state" : "uploading", "received" : 170000, "size" : 300000 }
假設你已經在你的web服務器中將/progress這個URI映射到了/var/www/progress這個目錄,那麼你可以通過ajax pointing來獲得那些json數據。
/progress/550e8400-e29b-41d4-a716-446655440000.js
很可能你的web服務器已經擁有一個相似的功能了,但是如果你需要改進原有的功能(或者只是想有更多的控制),那麼就將該功能委託給uWSGI服務器。
no-default-app
默認情況下,當uWSGI沒有找到SCRIPT_NAME指定的app時,會使用默認的app(大多數情況,默認的app都位於/目錄下)。開啓這個選項,在沒有可用的app時會返回一個錯誤。
manage-script-name
如果因爲某些原因,你的web服務器不能處理SCRIPT_NAME,你可以強制uWSGI自動重建PATH_INFO。
udp
啓動一個udp服務器,主要用在snmp或者爲UdpLogging提供一個共享的打日誌服務器。
multicast
內部選項,用於第三方插件。
cluster
加入指定的集羣。見Clustering。
cluster-nodes
你可以得到一個集羣裏的節點列表,而不需要加入這個集羣。
--cluster-nodes 225.1.1.1:1717
使用上述選項能得到225.1.1.1:1717這個集羣的所有節點。這個列表提供給uwsgi內部均衡負載api用的。
cluster-reload
優雅地重啓整個集羣。
--cluster 225.1.1.1:1717 --cluster-reload
使用上述選項會重啓225.1.1.1:1717這個集羣中的所有節點。
cluster-log
給一個集羣的所有節點服務器發送一個日誌信息。
--cluster 225.1.1.1:1717 --cluster-log "Hello World"
上述選項會在所有的節點日誌文件中打印出"Hello World"
subscribe-to or st or subscribe
訂閱一個SubscriptionServer,你可以通過配置多次該選項來達到訂閱多個服務器的目的。
[uwsgi] subscribe-to = 192.168.0.1:2626:unbit.it subscribe-to = 192.168.0.2:2626:uwsgi.it
shared-socket
一個高級選項,插件作者會用到,或者用於一些特殊的需求。該選項允許服務器在啓動早期創建一個socket,在失去特權或者被監禁的時候依然能使用它。
snmp
啓動一個SNMP服務器。見UseSnmp
snmp-community
set the snmp community string
check-interval
主進程每秒都會進行一次掃描。如果需要你可以加長這個掃描時間。不建議。
binary-path
如果uWSGI的二進制文件路徑沒有加到系統環境變量中,你可以使用這個選項強制改變二進制的查找路徑,那麼重載系統和Emperor都能輕易找到可執行的二進制文件。
async
開啓異步模式。見AsyncSupport。
logto
將日誌打到一個指定的文件或者udp服務器。
logfile-chown
log-syslog
將日誌打到系統日誌上,而不再打到日誌文件中。
傳入一個參數,使uwsgi使用這個參數作爲程序名,用在系統日誌開始部分裏。
--log-syslog mywebapp
log-master
委託主進程來負責日誌的寫操作(這將把所有的日誌IO操作都放到一個進程中)。對使用高級的IO調度策略的系統來說是很有用的。
logdate or log-date
在每一個日誌行中都打印時間信息。你可以傳入一個strftime()格式的參數,來格式化時間的格式。
log-zero
打印請求大小爲0的請求。
log-slow
log-4xx
log-5xx
log-big
log-sendfile
log-micros
使用微秒作爲日誌中響應時間的單位(默認是毫秒)。
master-as-root
以root權限運行uWSGI的主進程。
chdir
在失去權限前,使用chdir()到指定目錄。
chdir2
在失去權限後,使用chdir()到指定目錄。
lazy
等每一個工作進程都生成以後才加載應用程序。
cheap
延遲啓動工作進程直到第一個請求到來。當第一個請求來時就會啓動預先設置個數的工作進程。
如果沒有設置工作進程數,那麼最多隻會啓動一個工作進程。
cheaper
一個高階的cheap模式,這個選項將在啓動的時候只分配n個工作進程,並將使用多種算法來實現適應性的進程啓動。
在啓動的時候至少會分配一個工作進程,即及時設置n爲0,也會在最開始啓動一個工作進程。
如果當前工作進程不足以處理收到的請求,那麼就會按請求量按需啓動其他的工作進程,直到工作進程達到預先設置的個數。
如果沒有設置工作進程數,那麼只會在剛啓動的時候啓動一個工作進程,之後將不再啓動其他進程。
--cheaper <n>
idle
在經過<secs>秒的不活躍狀態後銷燬工作進程(這時就進入了cheap模式),只會剩下主進程。
如果有cheaper選項,那麼就進入cheaper模式,之後收到第一個請求就會啓動工作進程,啓動的個數由cheaper選項裏配置的n決定。
--idle <secs>
mount
允許同一個進程加載多個app。
--mount /pinax=/var/www/pinax/deploy/pinax.wsgi
grunt
allows grunt processes
threads
開啓線程操作模式。你必須指定每個工作進程的線程數。
--threads 40 --workers 2
這個配置會導致生成2個工作進程,每個工作進程有40個子線程。
vhost
開啓虛擬主機模式。見VirtualHosting
vhost-host
默認情況下,虛擬主機模式使用SERVER_NAME作爲主機名的關鍵字。如果你希望使用HTTP_HOST,那就加這個選項。
check-static
uWSGI會在移交控制權給指定處理者之前檢查該選項指定的目錄。
uWSGI會檢查這個目錄,如果剛好請求的PATH_INFO有一個文件在這個目錄,那麼uWSGI就會提供這個文件。
--check-static /var/www/example.com
使用上述配置,如果客戶端請求foo.png,而該文件又恰好存在於/var/www/example.com/foo.png,那麼uWSGI就會直接用指定的方法提供這個文件(默認是用sendfile ())。
static-map
映射一個資源到靜態文件區。
[uwsgi] static-map = /media=/var/www/django/contrib/admin/media static-map = /images=/var/www/example.com/images
無論什麼時候一個PATH_INFO匹配到配置文件中的資源,uWSGI會直接用指定的方法提供這個文件(默認是用sendfile ())。
static-index
在目錄索引中用到的靜態文件的文件名。
static-index = index.html
如果請求/doc/,那麼uWSGI將檢查/doc/index.html,如果存在就會提供給客戶端。
file-serve-mode
設置靜態服務模式:
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指定的內容,如果存在就提供該內容。
close-on-exec
給uWSGI的socket設置close-on-exec標識,這將避免在一個請求中產生額外的進程,來繼承socket文件的描述符。
mode
普通選項,app可以使用uwsgi.mode來獲得這個選項值。
env
設置一個系統環境變量。
[uwsgi] env = DJANGO_SETTINGS_MODULE=mysite.settings
這個配置將會設置一個環境變量DJANGO_SETTINGS_MODULE,它的值爲mysite.settings
vacuum
當服務器退出的時候自動刪除unix socket文件和pid文件。
cgroup
run the server in <group> cgroup (Linux only)
cgroup-opt
設置cgroup選項(僅限於Linux)
--cgroup-opt KEY=VAL
reuse-port (BSD only)
允許多個實例綁定到同一個地址。
loop
設置LoopEngine(高級選項)
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 --workers 4 --worker-exec /usr/bin/php53-cgi
attach-daemon
給uWSGI主進程附加一個進程,並允許主進程控制、監控、重啓這個進程。一個比較典型的使用是給主進行附加一個memcached實例。
[uwsgi]
master = true
attach-daemon = memcached
plugins
加載指定的插件。
--plugins psgi,greenlet
這個配置將加載psgi插件和greenlet插件。
allowed-modifiers
限制客戶端只能訪問modifiers的子集。
--allowed-modifiers 0,111
這個配置將只允許客戶端訪問WSGI處理程序和cache處理程序。
remap-modifier
dump-options
打印所有可用的選項,然後退出。
show-config
以ini文件格式打印當前的配置。
將在解析配置文件的工程中打印一個字符串。
[uwsgi] print = foo
將在服務器啓動的時候打印"foo"。
version
打印出uWSGI的版本,然後退出。
wsgi-file or file [python plugin required]
加載指定的WSGI文件(與Graham的mod_wsgi形式兼容)
eval [python plugin required]
把計算一個字符串的值作爲WSGI的入口。
<uwsgi> <eval> def application(e, sr): pass </eval> </uwsgi>
module [python plugin required]
加載指定的python WSGI模塊(模塊路徑必須在PYTHONPATH裏)
callable [python plugin required]
設置在收到請求時,uWSGI加載的模塊中哪個變量將被調用,默認是名字爲“application”的變量。
test [python plugin required]
測試一個模塊是否能被成功的加載。
home or virtualenv or venv or pyhome [python plugin required]
爲python程序設置指定的虛擬環境變量。
--virtualenv /apps/env001
使用在/apps/env001的虛擬環境變量。
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
設置python的系統參數(sys.argv)
--pyargv "one two three"
該配置會將sys.argv 設爲('one','two','three')。
optimize
設置python爲最優化級別(要小心)
paste
use paste.deploy to load a WSGI app
使用paste.deploy 來加載一個WSGI程序。
uwsgi --paste config:/foo/development.ini
ini-paste
ini和paste這2個選項的簡化,在文件解析完之後,將使用同樣的文件作爲paste.deploy的配置文件。
ini-paste-logged
load a paste.deploy config file containing uwsgi section (load loggers too)
catch-exceptions
在你的瀏覽器中打印出traceback信息,而不是在日誌文件中(不要在實際產品中使用這個選項)。
ignore-script-name
pep3333-input
reload-os-env
no-site [python plugin required]
不加載python的site.py模塊。
ping [ping plugin required]
工具性的選項。ping一個uwsgi服務器,如果ping成功,難麼進程就會退出,並返回0,否則返回一個大於0的值。
/usr/bin/uwsgi --ping 192.168.0.100:1717
將ping在192.168.0.100:1717的uWSGI服務器。
ping-timeout [ping plugin required]
設置ping的超時時間(默認是3秒)。ping的等待時間超過指定的秒數後就認爲該uWSGI實例已失效。
/usr/bin/uwsgi --ping 192.168.0.100:1717 --ping-timeout 10
將設置ping的超時時間爲10秒。
nagios
作nagios檢查。
fastrouter
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
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 a SubscriptionServer to the fastrouter to build the hostname:address map
fastrouter-timeout
設置fastrouter的內部超時時間。
http
開啓嵌入的http服務器、路由、網關、負載均衡、代理。
http-var
http-to
http-modifier1
http-use-cache
http-use-pattern
http-use-base
http-use-cluster
http-events
http-subscription-server
enable the SubscriptionServer for clustering and massive hosting/load-balancing
http-timeout
設置內部http的socket超時時間。
ugreen [ugreen plugin required]
enable uGreen as suspend/resume engine. See uGreen
ugreen-stacksize [ugreen plugin required]
set the stack size for uGreen
原文地址:
http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html#evil-reload-on-as