Gunicorn配置部分的翻译
寫(xiě)在前面,雖然翻譯得很爛,但也是我的勞動(dòng)成果,轉(zhuǎn)載請(qǐng)注明出處,謝謝。
Gunicorn版本號(hào)19.7.1
Gunicorn配置
概述
三種配置方式
優(yōu)先級(jí)如下,越后的優(yōu)先級(jí)越大
1.框架的設(shè)置(現(xiàn)在只有paster在用這個(gè))
2.配置文件(推薦使用這個(gè))
3.命令行的賦值
查看配置的方法
$ gunicorn --check-config APP_MODULE
這個(gè)命令可以檢查app的配置
設(shè)置的參數(shù)詳細(xì)說(shuō)明
關(guān)于環(huán)境變量
如前文所講,可以通過(guò)多種方式來(lái)設(shè)置運(yùn)行參數(shù),但是有一些參數(shù)是只能寫(xiě)在配置文件中,而剩下那些可以寫(xiě)在命令行中的參數(shù),都是可以通過(guò)設(shè)置環(huán)境變量來(lái)設(shè)置的。
$ GUNICORN_CMD_ARGS="--bind=127.0.0.1 --workers=3" gunicorn app:app
config File
config 配置文件的地址
用法:'-c CONFIG, --config CONFIG'
默認(rèn)值:None
這個(gè)參數(shù)需要在命令行中傳入,或者作為應(yīng)用特定配置的一部分(后面半句我也不懂)
參數(shù)要求是文件的地址,或者是python的module(我猜是類(lèi)似 python:some_module.module.conf)
需要注意的是,如果參數(shù)是python的module,則參數(shù)的形式必須是python:module_name
Server Socket 服務(wù)端口
bind 綁定端口
用法:-b ADDRESS, --bind ADDRESS
默認(rèn)值:['127.0.0.1:8000']
就是指定綁定的端口號(hào)
官方提了一個(gè)可以綁定多個(gè)地址的例子
$ gunicorn -b 127.0.0.1:8000 -b [::1]:8000 test:app
如上,就是將app綁到了本地的ipv4和ipv6的接口
backlog 允許掛起的鏈接數(shù)
用法:--backlog INT
默認(rèn)值:2048
就是設(shè)置允許掛起的連接數(shù)的最大值
官方推薦這個(gè)值設(shè)在64-2048
Worker Processes 工作進(jìn)程相關(guān)
workers 進(jìn)程數(shù)量
用法:-w INT, --workers INT
默認(rèn)值:1
設(shè)置處理請(qǐng)求的進(jìn)程數(shù),官方推薦的值是2-4 x $(NUM_CORES),就是核心數(shù)的2-4倍,而我在網(wǎng)上查到的,大多數(shù)是推薦設(shè)置為核心數(shù)的兩倍+1
worker_class 進(jìn)程的工作方式
用法:-k STRING, --worker-class STRING
默認(rèn)值:sync
設(shè)置進(jìn)程的工作方式,默認(rèn)是同步,如果需要設(shè)置異步,則需要下載相關(guān)的庫(kù)
可選的參數(shù)如下:
*eventlet-要求eventlet版本大于0.9.7
*gevent-要求gevent版本大于0.13
*tornado-要求tornado版本大于0.2
*gthread-安裝了futures庫(kù)的python2(意思就是python3隨便用?)
*giohttp-python3.4以上,且aiohttp版本大于0.21.5
如果要用自己的庫(kù)來(lái)處理的話(huà),就將庫(kù)添加到gunicorn.workers,然后再選擇自己的worker
threads 線程數(shù)
用法:--threads INT
默認(rèn)值:1
就是設(shè)置開(kāi)啟的多線程的數(shù)目,官方也是推薦設(shè)置為核心數(shù)的兩至四倍。
這個(gè)設(shè)置只對(duì)進(jìn)程工作方式為Gthread的產(chǎn)生影響。
worker_connections 進(jìn)程鏈接數(shù)
用法:--workers-connections INT
默認(rèn)值:1000
設(shè)置同時(shí)鏈接客戶(hù)端的閥值。
這個(gè)設(shè)置只對(duì)進(jìn)程工作方式為Eventlet和Gevent的產(chǎn)生影響。
max_requests 最大請(qǐng)求數(shù)
用法:--max-requests INT
默認(rèn)值:0
設(shè)置一個(gè)進(jìn)程處理完max_requests次請(qǐng)求后自動(dòng)重啟
就是設(shè)置這個(gè)可以預(yù)防內(nèi)存泄漏,如果不設(shè)置的話(huà),則進(jìn)程不會(huì)自動(dòng)重啟
max_requests_jitter 最大請(qǐng)求數(shù)的變化值
用法:--max-requests-jitter INT
默認(rèn)值:0
這個(gè)的作用與max_requests的幾乎一致,只是后者設(shè)置為固定值,而這個(gè)的值是randint(0, max_requests_jitter)
timeout 過(guò)期時(shí)間
用法:-t INT, --timeout INT
默認(rèn)值:30
worker沉默(不工作?不發(fā)送response?)超過(guò)timeout秒之后就會(huì)重啟
對(duì)于同步worker來(lái)講,官方建議用default值就可以了,當(dāng)然,如果你確認(rèn)這個(gè)值不滿(mǎn)足你的要求的時(shí)候,可以調(diào)高。
對(duì)于異步worker來(lái)講,worker仍然會(huì)繼續(xù)通信(發(fā)response?),而且對(duì)于處理一個(gè)獨(dú)立的請(qǐng)求來(lái)講,它是與所需的時(shí)間無(wú)關(guān)。(個(gè)人理解為,對(duì)于異步來(lái)講,這個(gè)參數(shù)是沒(méi)有意義的)
graceful_time 優(yōu)雅的timeout(后置的timeout)
用法:--graceful-timeout INT
默認(rèn)值:30
其實(shí)就是當(dāng)worker接收到重啟的信號(hào)之后,再工作這么久才真正執(zhí)行重啟。
keepalive 鏈接存活時(shí)間
用法:--keep-alive INT
默認(rèn)值:2
發(fā)送完一個(gè)response后,等待keepalive秒再關(guān)閉連接
建議設(shè)置為1-5
Security 安全方面的設(shè)置
limit_request_line 設(shè)置請(qǐng)求行的最大長(zhǎng)度
用法:--limit-request-line INT
默認(rèn)值:4094
允許設(shè)置的值為0-8190,0是不限制的意思。
文檔中提到這個(gè)參數(shù)可以防止DDOS攻擊,具體我還要去查一下為什么。
(網(wǎng)上查到的request-line其實(shí)就是請(qǐng)求的第一行,后面的都是鍵值對(duì)。因?yàn)镽ESTful的要求,這個(gè)第一行會(huì)包含挺多的信息)
limit_request_fields 設(shè)置請(qǐng)求頭的字段的范圍
用法:--limit-request-fields INT
默認(rèn)值:100
(這個(gè)我并不是很懂)
limit_request_field_size 設(shè)置請(qǐng)求頭的大小
用法:--limit-request-field_size INT
默認(rèn)值:8190
Debugging 調(diào)試
reload 重載
用法:--reload
默認(rèn)值:False
更改代碼的時(shí)候重啟workers, 只建議在開(kāi)發(fā)過(guò)程中開(kāi)啟。
文檔推薦下載inotify這個(gè)包來(lái)作為重載引擎。
reload_engine 重載的引擎
用法:--reload-engine STRING
默認(rèn)值:auto
選擇重載的引擎,支持的有三種,分別是auto,poll,inotify(需要單獨(dú)安裝)
spew 顯示
用法:--spew
默認(rèn)值:False
啟動(dòng)一個(gè)能夠?qū)⒎?wù)器執(zhí)行過(guò)的每一條語(yǔ)句都打印出來(lái)的函數(shù),然后這個(gè)選項(xiàng)是原子性的,就是要么全打,要么不打。
check_config 檢查配置
用法:--check-config
默認(rèn)值:False
顯示現(xiàn)在的配置。
Server Mechanics 服務(wù)結(jié)構(gòu)方面
preload_app 預(yù)重載應(yīng)用
用法:--preload
默認(rèn)值:False
在worker進(jìn)程被復(fù)制(派生)之前載入應(yīng)用的代碼。
通過(guò)預(yù)加載應(yīng)用,可以節(jié)省內(nèi)存資源和提高服務(wù)啟動(dòng)時(shí)間。當(dāng)然,如果你將應(yīng)用加載進(jìn)worker進(jìn)程這個(gè)動(dòng)作延后,那么重啟worker將會(huì)容易很多。
sendfile 發(fā)送文件?
用法:--no-sendfile
默認(rèn)值:None
這個(gè)值可以在環(huán)境變量設(shè)置。(文檔中并沒(méi)有提到這個(gè)選項(xiàng)是干嘛的 )
chdir 改變目錄?
用法:--chdir
默認(rèn)值:/home/docs/checkouts/readthedocs.org/user_builds/gunicorn-docs/checkouts/latest/docs/source
在載入應(yīng)用之前改變目錄(但是文檔中沒(méi)講明白這個(gè)目錄是存放什么的)
daemon 守護(hù)進(jìn)程
用法:-D, --daemon
默認(rèn)值:False
以守護(hù)進(jìn)程形式來(lái)運(yùn)行Gunicorn進(jìn)程。
其實(shí)就是將這個(gè)服務(wù)放到后臺(tái)去運(yùn)行。
raw_env 設(shè)置環(huán)境變量
用法:-e ENV, --env ENV
默認(rèn)值:[]
用鍵值對(duì)來(lái)設(shè)置環(huán)境變量。
$ gunicorn -b 127.0.0.1:8000 --env FOO=1 test:app
pidfile 進(jìn)程文件名
用法:-p FILE, --pid FILE
默認(rèn)值:None
設(shè)置pid文件的文件名,如果不設(shè)置的話(huà),不會(huì)創(chuàng)建pid文件。
worker_tmp_dir 工作臨時(shí)地址
用法:--worker-tmp-dir DIR
默認(rèn)值:None
設(shè)置工作的臨時(shí)文件夾的地址。
如果不設(shè)置,則會(huì)采用默認(rèn)值,也就是調(diào)用os.fchmod來(lái)找一個(gè)地址,但是如果這個(gè)地址是disk-backed類(lèi)型的文件系統(tǒng),很有可能會(huì)讓worker阻塞;或者如果默認(rèn)的硬盤(pán)滿(mǎn)掉了,Gunicorn也不會(huì)啟動(dòng)。所以文檔建議我們?cè)谛聮燧d一個(gè)/tmpfs,然后把這個(gè)地址賦到這里來(lái)
sudo cp /etc/fstab /etc/fstab.orig sudo mkdir /mem echo 'tmpfs /mem tmpfs defaults,size=64m,mode=1777,noatime,comment=for-gunicorn 0 0' | sudo tee -a /etc/fstab sudo mount /mem ..... --worker-tmp-dir /memuser 設(shè)置用戶(hù)
用法:-u USER, --user USER
默認(rèn)值:1005
選擇一個(gè)工作進(jìn)程來(lái)作為當(dāng)前用戶(hù)。
這里可以輸入有效的用戶(hù)id或者用戶(hù)名,那么在用pwd.getpwnam(value)的時(shí)候就可以取到這個(gè)值。如果輸入None,則不會(huì)改變當(dāng)前工作進(jìn)程的用戶(hù)。
group 設(shè)置用戶(hù)組
用法:-g GROUP, --group GROUP
默認(rèn)值:205
與上面那個(gè)類(lèi)似。
umask 權(quán)限掩碼
用法:-m INT, --umask INT
默認(rèn)值:0
Gunicorn對(duì)寫(xiě)文件的權(quán)限。
initgroups 設(shè)置新組
用法:--initgroups
默認(rèn)值:False
設(shè)置為真的時(shí)候,會(huì)將所有worker進(jìn)程加到一個(gè)指定名字的新組中。
tmp_upload_dir 上傳文件的臨時(shí)存放地址
默認(rèn)值:None
保存那些臨時(shí)的請(qǐng)求內(nèi)容。
文檔講這個(gè)選型未來(lái)可能會(huì)被移除。
如果設(shè)置了路徑,要確保worker進(jìn)程有權(quán)限去寫(xiě)。如果不設(shè)置,則會(huì)選擇/tmp來(lái)存放。
secure_scheme_headers
默認(rèn)值:{'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
這個(gè)字典指明了哪些請(qǐng)求頭是HTTPS請(qǐng)求。
forwarded_allow_ips 選擇接收的對(duì)象
用法:--forwarded-allow-ips STRING
默認(rèn)值:127.0.0.1
比如在跟Nginx一起部署的時(shí)候,如果Nginx不在本機(jī)上(localhost),為了避免偽造host的攻擊,可以指定只接收從那些指定的地址傳來(lái)的連接,而如果Nginx就在本機(jī)上,就直接按默認(rèn)的127.0.0.1就行了。
Logging 日志設(shè)置
accesslog 設(shè)置訪問(wèn)日志存放的地方
用法:--access-logfile FILE
默認(rèn)值:None
設(shè)置為-就是記錄到標(biāo)準(zhǔn)輸出。
access_log_format 訪問(wèn)日志的格式
用法:--access-logformat STRING
默認(rèn)值:%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
| h | remote address |
| l | '-' |
| u | user name |
| t | date of the request |
| r | status line (e.g. GET / HTTP/1.1) |
| m | request method |
| U | URL path without query string |
| q | query string |
| H | protocol |
| s | status |
| B | response length |
| b | response length or '-' (CLF format) |
| f | referer |
| a | user agent |
| T | request time in seconds |
| D | request time in microseconds |
| L | request time in decimal seconds |
| p | process ID |
| {Header}i | request header |
| {Header}o | response header |
| {Variable}e | environment variable |
errorlog 設(shè)置錯(cuò)誤日志的存放地址
用法:--error-logfile FILE, --log-file FILE
默認(rèn)值:-
設(shè)置為-就是記錄到標(biāo)準(zhǔn)輸出。
loglevel 設(shè)置日志等級(jí)
用法:--log-level LEVEL
默認(rèn)值:info
debug,info,warning,error,critical
capture_output 捕捉標(biāo)準(zhǔn)輸出
用法:--capture-output
默認(rèn)值:False
重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤信息到錯(cuò)誤日志。
logger_class 選擇處理日志的方法
用法:--logger-class STRING
默認(rèn)值:gunicorn.glogging.Logger
logconfig 日志的配置
用法:--log-config FILE
默認(rèn)值:None
默認(rèn)使用python標(biāo)準(zhǔn)庫(kù)logging的配置文件形式。
syslog_addr 系統(tǒng)日志的地址
用法:--log-syslog-to SYSLOG_ADDR
默認(rèn)值:udp://localhost:514
設(shè)置發(fā)送系統(tǒng)日志信息的地址。
可傳遞的方式
- unix://PATH#TYPE對(duì)于unix的socket來(lái)講,可以用stream或者gram形式。
- udp://HOST:PORT
- tcp://HOST:PORT
syslog 啟用系統(tǒng)日志來(lái)記載
用法:--log-syslog
默認(rèn)值:False
把Gunicorn的日志發(fā)送到系統(tǒng)日志。
syslog_prefix 系統(tǒng)日志的前綴
用法:--log-syslog-prefix SYSLOG_RREFIX
默認(rèn)值:None
設(shè)置每條系統(tǒng)日志的前綴,默認(rèn)是進(jìn)程的名字。
syslog_facility 系統(tǒng)日志的別名
用法:--log-syslog-facility SYSLOG_FACILITY
默認(rèn)值:user
enable_stdio_inheritance 標(biāo)準(zhǔn)輸入輸出的繼承
用法:-R, --enable-stdio-inhertitance
默認(rèn)值:False
允許標(biāo)準(zhǔn)輸入輸出的繼承,允許標(biāo)準(zhǔn)輸入輸出文件描述符在守護(hù)進(jìn)程模式下的繼承。
可以設(shè)置環(huán)境變量PYHTONUNBUFFERED來(lái)取消python標(biāo)準(zhǔn)輸出的緩存(?)
statsd_host
網(wǎng)上查到statsd的意思是單機(jī)搭建,暫時(shí)沒(méi)理解是什么意思。
statsd_prefix
不懂不懂
Process Naming 進(jìn)程命名
proc_name 設(shè)置進(jìn)程名字
用法:-n STRING, --name STRING
默認(rèn)值:None
用setproctitle這個(gè)模塊(需要額外安裝)去給進(jìn)程命名,方便我們?cè)趐s或者top的時(shí)候分辨出哪個(gè)是我們想要的。
不設(shè)置的時(shí)候,會(huì)用default_proc_name
default_proc_name 默認(rèn)的進(jìn)程名
gunicorn
Server Mechanics 服務(wù)架構(gòu)
pythonpath
用法:--pythonpath STRING
默認(rèn)值:None
將這些路徑加到python path去
e.g.'/home/djangoprojects/myproject,/home/python/mylibrary'
paste
PASS
Server Hooks 服務(wù)的鉤子函數(shù)
on_starting
def on_starting(sever):pass這個(gè)函數(shù)會(huì)在主進(jìn)程初始化后被調(diào)用。
函數(shù)需要接收一個(gè)服務(wù)的實(shí)例作為參數(shù)。
on_reload
def on_reload(server):pass函數(shù)會(huì)在接收到掛起信號(hào)而重載的時(shí)候被調(diào)用。
函數(shù)需要接收一個(gè)服務(wù)的實(shí)例作為參數(shù)。
when_ready
def when_ready(sever):pass函數(shù)會(huì)在服務(wù)啟動(dòng)之后就被調(diào)用。
函數(shù)需要接收一個(gè)服務(wù)的實(shí)例作為參數(shù)。
pre_fork
def post_fork(sever, worker):pass函數(shù)在worker派生(生成)之前被調(diào)用。
函數(shù)需要接收一個(gè)服務(wù)的實(shí)例和一個(gè)新的worker。(不懂,既然函數(shù)是在生成worker之前調(diào)用,那又怎么將這個(gè)未生成的worker傳到這個(gè)函數(shù)里面來(lái)呢)
post_fork
def post_fork(sever, worker):pass函數(shù)在worker派生(生成)之后被調(diào)用。
函數(shù)需要接收一個(gè)服務(wù)的實(shí)例和一個(gè)新的worker。
post_worker_init
def post_worker_init(worker):pass函數(shù)在worker完成應(yīng)用初始化之后被調(diào)用。
函數(shù)需要接收一個(gè)完成初始化的worker。
work_int
def worker_int(worker):pass函數(shù)會(huì)在worker退出信號(hào)流(?)或者掛起的時(shí)候調(diào)用。
函數(shù)需要接收一個(gè)完成初始化的worker。
work_abort
def worker_abort(worker):pass函數(shù)會(huì)在worker接收到請(qǐng)求異常終止信號(hào)的時(shí)候被調(diào)用。
一般這個(gè)情況發(fā)生在timeout(超時(shí))。
函數(shù)需要接收一個(gè)完成初始化的worker。
pre_exec
def pre_exec(server):pass函數(shù)會(huì)在新的主進(jìn)程生成(派生)之前被調(diào)用。
函數(shù)需要接收一個(gè)服務(wù)的實(shí)例。
pre_request
def pre_request(worker, req):worker.log.debug("%s %s" % (req.method, req.path))函數(shù)會(huì)在worker處理請(qǐng)求之前被調(diào)用。
函數(shù)需要接收這個(gè)worker,和請(qǐng)求作為參數(shù)。
post_request
def post_request(worker, req, environ, resp):pass函數(shù)會(huì)在worker處理請(qǐng)求后被調(diào)用。
函數(shù)需要接收這個(gè)worker,和請(qǐng)求作為參數(shù)。
child_exit
def child_ext(sever, worker):pass函數(shù)會(huì)在worker完全退出之后,在主進(jìn)程被調(diào)用。
函數(shù)需要接收這個(gè)服務(wù)的實(shí)例,和這個(gè)worker作為參數(shù)。
worker_exit
def worker_exit(server, worker):pass函數(shù)會(huì)在worker完全退出之后,在worker進(jìn)程被調(diào)用。
函數(shù)需要接收這個(gè)服務(wù)的實(shí)例,和這個(gè)worker作為參數(shù)。
nworkers_changed
def nworkers_changed(server, new_value, old_value):pass函數(shù)在worker數(shù)量產(chǎn)生變化后被調(diào)用。
函數(shù)接收的參數(shù)為,服務(wù)的實(shí)例,新的worker數(shù)量,和變化之前的數(shù)量。
第一次的時(shí)候,old_value是None
on_exit
def on_exit(server):pass函數(shù)在退出Gunicorn的時(shí)候被調(diào)用。
函數(shù)接收服務(wù)的實(shí)例作為參數(shù)。
Server Mechanics
proxy_protocol 代理協(xié)議
用法:--proxy_protocol
默認(rèn)值:False
使用代理模式。
文檔介紹了開(kāi)啟這個(gè)模式后,可以讓stunnel作為HTTPS的前端,然后Gunicorn作為HTTP的服務(wù)器。(并不是很懂,暫時(shí)略過(guò))
proxy_allow_ips
用法:--proxy-allow-from
默認(rèn)值:127.0.0.1
不懂不懂
設(shè)置*來(lái)禁用這個(gè)功能。
SSL
keyfile
用法:--keyfile FILE
默認(rèn)值:None
指定ssl的key文件(那是公匙還是私匙?)
certfile
用法:--certfile FILE
默認(rèn)值:None
指定ssl的證書(shū)文件
ssl_version
用法:--ssl-version
默認(rèn)值:2
指定使用的ssl版本(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)
cert_reqs
用法:--cert-reqs
默認(rèn)值:0
是否需要客戶(hù)端提供證書(shū)(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)
ca_certs
用法:--ca-certs FILE
默認(rèn)值:None
指定CA證書(shū)文件
suppress_ragged_eofs
用法:--suppress-ragged-eofs
默認(rèn)值:True
禁止粗魯?shù)耐V?#xff1f;不是很懂
do_handshake_on_connect
用法:--do-handshake-on-connect
默認(rèn)值:False
在socket連接的時(shí)候是否執(zhí)行ssl握手(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)
ciphers
用法:--ciphers
默認(rèn)值:TLSv1
指定使用的加密算法(也要看標(biāo)準(zhǔn)庫(kù)的ssl模塊是否支持)
Server Mechanics
raw_paste_global_conf
pass
轉(zhuǎn)載于:https://www.cnblogs.com/nanrou/p/7026789.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Gunicorn配置部分的翻译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [python]-数据科学库Numpy学
- 下一篇: MIPS下CPU和RAM的数据流动情况详