Gunicorn配置部分的翻译

写在前面,虽然翻译得很烂,但也是我的劳动成果,转载请注明出处,谢谢。
Gunicorn版本号19.7.1


Gunicorn配置

概述

三种配置方式

优先级如下,越后的优先级越大

1.框架的设置(现在只有paster在用这个)

2.配置文件(推荐使用这个)

3.命令行的赋值

查看配置的方法

$ gunicorn --check-config APP_MODULE

这个命令可以检查app的配置

设置的参数详细说明

关于环境变量

如前文所讲,可以通过多种方式来设置运行参数,但是有一些参数是只能写在配置文件中,而剩下那些可以写在命令行中的参数,都是可以通过设置环境变量来设置的。

$ GUNICORN_CMD_ARGS="--bind=127.0.0.1 --workers=3" gunicorn app:app

config File

config 配置文件的地址

用法:'-c CONFIG, --config CONFIG'

默认值:None

这个参数需要在命令行中传入,或者作为应用特定配置的一部分(后面半句我也不懂)

参数要求是文件的地址,或者是python的module(我猜是类似 python:some_module.module.conf)

需要注意的是,如果参数是python的module,则参数的形式必须是python:module_name

Server Socket 服务端口

bind 绑定端口

用法:-b ADDRESS, --bind ADDRESS

默认值:['127.0.0.1:8000']

就是指定绑定的端口号

官方提了一个可以绑定多个地址的例子

$ gunicorn -b 127.0.0.1:8000 -b [::1]:8000 test:app

如上,就是将app绑到了本地的ipv4和ipv6的接口

backlog 允许挂起的链接数

用法:--backlog INT

默认值:2048

就是设置允许挂起的连接数的最大值

官方推荐这个值设在64-2048

Worker Processes 工作进程相关

workers 进程数量

用法:-w INT, --workers INT

默认值:1

设置处理请求的进程数,官方推荐的值是2-4 x $(NUM_CORES),就是核心数的2-4倍,而我在网上查到的,大多数是推荐设置为核心数的两倍+1

worker_class 进程的工作方式

用法:-k STRING, --worker-class STRING

默认值:sync

设置进程的工作方式,默认是同步,如果需要设置异步,则需要下载相关的库

可选的参数如下:

*eventlet-要求eventlet版本大于0.9.7

*gevent-要求gevent版本大于0.13

*tornado-要求tornado版本大于0.2

*gthread-安装了futures库的python2(意思就是python3随便用?)

*giohttp-python3.4以上,且aiohttp版本大于0.21.5

如果要用自己的库来处理的话,就将库添加到gunicorn.workers,然后再选择自己的worker

threads 线程数

用法:--threads INT

默认值:1

就是设置开启的多线程的数目,官方也是推荐设置为核心数的两至四倍。

这个设置只对进程工作方式为Gthread的产生影响。

worker_connections 进程链接数

用法:--workers-connections INT

默认值:1000

设置同时链接客户端的阀值。

这个设置只对进程工作方式为Eventlet和Gevent的产生影响。

max_requests 最大请求数

用法:--max-requests INT

默认值:0

设置一个进程处理完max_requests次请求后自动重启

就是设置这个可以预防内存泄漏,如果不设置的话,则进程不会自动重启

max_requests_jitter 最大请求数的变化值

用法:--max-requests-jitter INT

默认值:0

这个的作用与max_requests的几乎一致,只是后者设置为固定值,而这个的值是randint(0, max_requests_jitter)

timeout 过期时间

用法:-t INT, --timeout INT

默认值:30

worker沉默(不工作?不发送response?)超过timeout秒之后就会重启

对于同步worker来讲,官方建议用default值就可以了,当然,如果你确认这个值不满足你的要求的时候,可以调高。

对于异步worker来讲,worker仍然会继续通信(发response?),而且对于处理一个独立的请求来讲,它是与所需的时间无关。(个人理解为,对于异步来讲,这个参数是没有意义的)

graceful_time 优雅的timeout(后置的timeout)

用法:--graceful-timeout INT

默认值:30

其实就是当worker接收到重启的信号之后,再工作这么久才真正执行重启。

keepalive 链接存活时间

用法:--keep-alive INT

默认值:2

发送完一个response后,等待keepalive秒再关闭连接

建议设置为1-5

Security 安全方面的设置

limit_request_line 设置请求行的最大长度

用法:--limit-request-line INT

默认值:4094

允许设置的值为0-8190,0是不限制的意思。

文档中提到这个参数可以防止DDOS攻击,具体我还要去查一下为什么。

(网上查到的request-line其实就是请求的第一行,后面的都是键值对。因为RESTful的要求,这个第一行会包含挺多的信息)

limit_request_fields 设置请求头的字段的范围

用法:--limit-request-fields INT

默认值:100

(这个我并不是很懂)

limit_request_field_size 设置请求头的大小

用法:--limit-request-field_size INT

默认值:8190

Debugging 调试

reload 重载

用法:--reload

默认值:False

更改代码的时候重启workers, 只建议在开发过程中开启。

文档推荐下载inotify这个包来作为重载引擎。

reload_engine 重载的引擎

用法:--reload-engine STRING

默认值:auto

选择重载的引擎,支持的有三种,分别是autopollinotify(需要单独安装)

spew 显示

用法:--spew

默认值:False

启动一个能够将服务器执行过的每一条语句都打印出来的函数,然后这个选项是原子性的,就是要么全打,要么不打。

check_config 检查配置

用法:--check-config

默认值:False

显示现在的配置。

Server Mechanics 服务结构方面

preload_app 预重载应用

用法:--preload

默认值:False

在worker进程被复制(派生)之前载入应用的代码。

通过预加载应用,可以节省内存资源和提高服务启动时间。当然,如果你将应用加载进worker进程这个动作延后,那么重启worker将会容易很多。

sendfile 发送文件?

用法:--no-sendfile

默认值:None

这个值可以在环境变量设置。(文档中并没有提到这个选项是干嘛的 )

chdir 改变目录?

用法:--chdir

默认值:/home/docs/checkouts/readthedocs.org/user_builds/gunicorn-docs/checkouts/latest/docs/source

在载入应用之前改变目录(但是文档中没讲明白这个目录是存放什么的)

daemon 守护进程

用法:-D, --daemon

默认值:False

以守护进程形式来运行Gunicorn进程。

其实就是将这个服务放到后台去运行。

raw_env 设置环境变量

用法:-e ENV, --env ENV

默认值:[]

用键值对来设置环境变量。

$ gunicorn -b 127.0.0.1:8000 --env FOO=1 test:app

pidfile 进程文件名

用法:-p FILE, --pid FILE

默认值:None

设置pid文件的文件名,如果不设置的话,不会创建pid文件。

worker_tmp_dir 工作临时地址

用法:--worker-tmp-dir DIR

默认值:None

设置工作的临时文件夹的地址。

如果不设置,则会采用默认值,也就是调用os.fchmod来找一个地址,但是如果这个地址是disk-backed类型的文件系统,很有可能会让worker阻塞;或者如果默认的硬盘满掉了,Gunicorn也不会启动。所以文档建议我们在新挂载一个/tmpfs,然后把这个地址赋到这里来

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 /mem

user 设置用户

用法:-u USER, --user USER

默认值:1005

选择一个工作进程来作为当前用户。

这里可以输入有效的用户id或者用户名,那么在用pwd.getpwnam(value)的时候就可以取到这个值。如果输入None,则不会改变当前工作进程的用户。

group 设置用户组

用法:-g GROUP, --group GROUP

默认值:205

与上面那个类似。

umask 权限掩码

用法:-m INT, --umask INT

默认值:0

Gunicorn对写文件的权限。

initgroups 设置新组

用法:--initgroups

默认值:False

设置为真的时候,会将所有worker进程加到一个指定名字的新组中。

tmp_upload_dir 上传文件的临时存放地址

默认值:None

保存那些临时的请求内容。

文档讲这个选型未来可能会被移除。

如果设置了路径,要确保worker进程有权限去写。如果不设置,则会选择/tmp来存放。

secure_scheme_headers

默认值:{'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}

这个字典指明了哪些请求头是HTTPS请求。

forwarded_allow_ips 选择接收的对象

用法:--forwarded-allow-ips STRING

默认值:127.0.0.1

比如在跟Nginx一起部署的时候,如果Nginx不在本机上(localhost),为了避免伪造host的攻击,可以指定只接收从那些指定的地址传来的连接,而如果Nginx就在本机上,就直接按默认的127.0.0.1就行了。

Logging 日志设置

accesslog 设置访问日志存放的地方

用法:--access-logfile FILE

默认值:None

设置为-就是记录到标准输出。

access_log_format 访问日志的格式

用法:--access-logformat STRING

默认值:%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"

IdentifierDescription
hremote address
l'-'
uuser name
tdate of the request
rstatus line (e.g. GET / HTTP/1.1)
mrequest method
UURL path without query string
qquery string
Hprotocol
sstatus
Bresponse length
bresponse length or '-' (CLF format)
freferer
auser agent
Trequest time in seconds
Drequest time in microseconds
Lrequest time in decimal seconds
pprocess ID
{Header}irequest header
{Header}oresponse header
{Variable}eenvironment variable

errorlog 设置错误日志的存放地址

用法:--error-logfile FILE, --log-file FILE

默认值:-

设置为-就是记录到标准输出。

loglevel 设置日志等级

用法:--log-level LEVEL

默认值:info

debug,info,warning,error,critical

capture_output 捕捉标准输出

用法:--capture-output

默认值:False

重定向标准输出和标准错误信息到错误日志。

logger_class 选择处理日志的方法

用法:--logger-class STRING

默认值:gunicorn.glogging.Logger

logconfig 日志的配置

用法:--log-config FILE

默认值:None

默认使用python标准库logging的配置文件形式。

syslog_addr 系统日志的地址

用法:--log-syslog-to SYSLOG_ADDR

默认值:udp://localhost:514

设置发送系统日志信息的地址。

可传递的方式

  • unix://PATH#TYPE对于unix的socket来讲,可以用stream或者gram形式。
  • udp://HOST:PORT
  • tcp://HOST:PORT

syslog 启用系统日志来记载

用法:--log-syslog

默认值:False

把Gunicorn的日志发送到系统日志。

syslog_prefix 系统日志的前缀

用法:--log-syslog-prefix SYSLOG_RREFIX

默认值:None

设置每条系统日志的前缀,默认是进程的名字。

syslog_facility 系统日志的别名

用法:--log-syslog-facility SYSLOG_FACILITY

默认值:user

enable_stdio_inheritance 标准输入输出的继承

用法:-R, --enable-stdio-inhertitance

默认值:False

允许标准输入输出的继承,允许标准输入输出文件描述符在守护进程模式下的继承。

可以设置环境变量PYHTONUNBUFFERED来取消python标准输出的缓存(?)

statsd_host

网上查到statsd的意思是单机搭建,暂时没理解是什么意思。

statsd_prefix

不懂不懂

Process Naming 进程命名

proc_name 设置进程名字

用法:-n STRING, --name STRING

默认值:None

setproctitle这个模块(需要额外安装)去给进程命名,方便我们在ps或者top的时候分辨出哪个是我们想要的。

不设置的时候,会用default_proc_name

default_proc_name 默认的进程名

gunicorn

Server Mechanics 服务架构

pythonpath

用法:--pythonpath STRING

默认值:None

将这些路径加到python path去

e.g.'/home/djangoprojects/myproject,/home/python/mylibrary'

paste

PASS

Server Hooks 服务的钩子函数

on_starting

def on_starting(sever):pass

这个函数会在主进程初始化后被调用。

函数需要接收一个服务的实例作为参数。

on_reload

def on_reload(server):pass

函数会在接收到挂起信号而重载的时候被调用。

函数需要接收一个服务的实例作为参数。

when_ready

def when_ready(sever):pass

函数会在服务启动之后就被调用。

函数需要接收一个服务的实例作为参数。

pre_fork

def post_fork(sever, worker):pass

函数在worker派生(生成)之前被调用。

函数需要接收一个服务的实例和一个新的worker。(不懂,既然函数是在生成worker之前调用,那又怎么将这个未生成的worker传到这个函数里面来呢)

post_fork

def post_fork(sever, worker):pass

函数在worker派生(生成)之后被调用。

函数需要接收一个服务的实例和一个新的worker。

post_worker_init

def post_worker_init(worker):pass

函数在worker完成应用初始化之后被调用。

函数需要接收一个完成初始化的worker。

work_int

def worker_int(worker):pass

函数会在worker退出信号流(?)或者挂起的时候调用。

函数需要接收一个完成初始化的worker。

work_abort

def worker_abort(worker):pass

函数会在worker接收到请求异常终止信号的时候被调用。

一般这个情况发生在timeout(超时)。

函数需要接收一个完成初始化的worker。

pre_exec

def pre_exec(server):pass

函数会在新的主进程生成(派生)之前被调用。

函数需要接收一个服务的实例。

pre_request

def pre_request(worker, req):worker.log.debug("%s %s" % (req.method, req.path))

函数会在worker处理请求之前被调用。

函数需要接收这个worker,和请求作为参数。

post_request

def post_request(worker, req, environ, resp):pass

函数会在worker处理请求后被调用。

函数需要接收这个worker,和请求作为参数。

child_exit

def child_ext(sever, worker):pass

函数会在worker完全退出之后,在主进程被调用。

函数需要接收这个服务的实例,和这个worker作为参数。

worker_exit

def worker_exit(server, worker):pass

函数会在worker完全退出之后,在worker进程被调用。

函数需要接收这个服务的实例,和这个worker作为参数。

nworkers_changed

def nworkers_changed(server, new_value, old_value):pass

函数在worker数量产生变化后被调用。

函数接收的参数为,服务的实例,新的worker数量,和变化之前的数量。

第一次的时候,old_value是None

on_exit

def on_exit(server):pass

函数在退出Gunicorn的时候被调用。

函数接收服务的实例作为参数。

Server Mechanics

proxy_protocol 代理协议

用法:--proxy_protocol

默认值:False

使用代理模式。

文档介绍了开启这个模式后,可以让stunnel作为HTTPS的前端,然后Gunicorn作为HTTP的服务器。(并不是很懂,暂时略过)

proxy_allow_ips

用法:--proxy-allow-from

默认值:127.0.0.1

不懂不懂

设置*来禁用这个功能。

SSL

keyfile

用法:--keyfile FILE

默认值:None

指定ssl的key文件(那是公匙还是私匙?)

certfile

用法:--certfile FILE

默认值:None

指定ssl的证书文件

ssl_version

用法:--ssl-version

默认值:2

指定使用的ssl版本(也要看标准库的ssl模块是否支持)

cert_reqs

用法:--cert-reqs

默认值:0

是否需要客户端提供证书(也要看标准库的ssl模块是否支持)

ca_certs

用法:--ca-certs FILE

默认值:None

指定CA证书文件

suppress_ragged_eofs

用法:--suppress-ragged-eofs

默认值:True

禁止粗鲁的停止?不是很懂

do_handshake_on_connect

用法:--do-handshake-on-connect

默认值:False

在socket连接的时候是否执行ssl握手(也要看标准库的ssl模块是否支持)

ciphers

用法:--ciphers

默认值:TLSv1

指定使用的加密算法(也要看标准库的ssl模块是否支持)

Server Mechanics

raw_paste_global_conf

pass

转载于:https://www.cnblogs.com/nanrou/p/7026789.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

台式计算机风扇声音大怎么处理,如何解决电脑电源风扇声音大的问题?

现在的台式机一般用3到5年后,一些问题自然也就慢慢表现出来了。很多网友在使用电脑过程中都有电脑风扇声音大怎么办的问题,电脑风扇声音大就会让人觉得使用电脑很不舒服,怎么办好呢?出现重要的问题要如何解决好呢?现在…

jsp分页功能

http://blog.csdn.net/xiazdong/article/details/6857515转载于:https://www.cnblogs.com/Baronboy/p/6112403.html

Spring Security第1部分–具有数据库的简单登录应用程序

什么是Spring Security? Spring Security是一个提供安全解决方案的框架,可在Web请求级别和方法级别上处理身份验证和授权。 Spring安全性通过两种方式处理安全性。 一种是安全的Web请求,另一种是在URL级别限制访问。 Spring Security使用Serv…

计算机应用 winxp,2017年职称计算机考试模块WindowsXP试题

2017年职称计算机考试模块WindowsXP试题全国专业技术人员计算机应用能力考试是专业技术人员资格考试的一种。接下来应届毕业生小编为大家搜索整理了2017年职称计算机考试模块WindowsXP试题,希望大家有所帮助。1. Windows XP中删除某个文件的快捷方式【 A 】。A. 对原…

Python基础(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重复   2 下次重复一定是基于上一次的结果而来 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代举例2、可迭代对象 可进行.__iter__()操作的为可迭代对象 #print(isinstance(str1,Iterable)),判断str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域请求数居&#xff0c;报错 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 参考&#xff1a;stackoverflow 未解决。。。脑仁疼。。。有小伙伴也碰到过这个问题么&#xff1f; 16/11/30 问题解决 1.服务器端API允许跨域访问(返回的数据添加允…

图片无法删除要计算机管理员,存在桌面的图片删不掉,怎么处理?提示是需要管理员权限。...

将下面代码复制到记事本里&#xff0c;重命名为1.bat&#xff0c;然后打开&#xff0c;这时你右键图片会出现管理员取得所有权&#xff0c;然后取得所有权后再删除试试Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]管理员取得所有权NoWorkingDirecto…

Java对象序列化的本机C / C ++类似性能

您是否曾经希望过像使用C 这样的本地语言将Java对象转换成字节流一样快的速度&#xff1f; 如果您使用标准的Java序列化&#xff0c;您可能会对性能感到失望。 Java序列化的目的是与尽可能快而紧凑地序列化对象的目的截然不同。 为什么我们需要快速紧凑的序列化&#xff1f; 我…

WebStrom Sass 编译配置 windows

第一步&#xff1a; 先安装Ruby下载 一路next 安装完成后打开开始菜单 打开后输入 gem install sass sass -v 出现版本号说明成功 第二部配置webstorm 在webstorm中settings中搜索file watchers工具&#xff0c;在此工具中添加一个scss的watcher 确定&#xff0c;打开一个scss…

非本地跳转之setjmp与longjmp

非本地跳转(unlocal jump)是与本地跳转相对应的一个概念。 本地跳转主要指的是类似于goto语句的一系列应用&#xff0c;当设置了标志之后&#xff0c;可以跳到所在函数内部的标号上。然而&#xff0c;本地跳转不能将控制权转移到所在程序的任意地点&#xff0c;不能跨越函数&am…

清华计算机自主招生试题,2017年清华大学自主招生笔试题

2017年清华大学自主招生笔试题2017高考结束后&#xff0c;全国各大高校自主招生面试开始了&#xff0c;以下是百分网小编搜索整理的关于2017年清华大学自主招生笔试题&#xff0c;供各位参考&#xff0c;希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!…

扩展剂:模式还是反模式?

扩展器模式在最近几年变得很流行&#xff0c;甚至已经在OSGi标准&#xff08;例如&#xff0c;蓝图服务和Web应用程序规范&#xff09;中使用。 在处女座&#xff0c;我们从一开始就与扩展程序一起工作&#xff0c;但是尽管它们具有优势&#xff0c;但它们仍有一些明显的缺点。…

python html格式编码

web应用如用到ace等网络编辑器的时候&#xff0c;如要支持html,xml等格式的文件编辑&#xff0c;输入ace 的文本内容必须先进行html格式编码&#xff1a; def html_escape(content): import cgi return cgi.escape(content)转载于:https://www.cnblogs.com/zhouxiaoming/p/703…

字符串替换

题目: 给定一个英文的字符串, 要求你将其中的元音删除掉, 返回新的字符串. 例如:"This website is for losers LOL!" --> "Ths wbst s fr lsrs LL!" 当看到这个题目的时候, 第一个想起的就是re模块的正则表达式. 不过由于最近使用过字符串的replace方…

小学计算机技术指导纲要,《中小学信息技术课程指导纲要(试行)》

《中小学信息技术课程指导纲要(试行)》2000年11月教育部颁发的《中小学信息技术课程指导纲要(试行)》教学目标&#xff1a;1、 增强信息意识&#xff0c;了解信息技术的发展变化及其对工作和社会的影响。2、 初步了解计算机基本工作原理&#xff0c;学会使用与学习和实际生活直…

JavaFX 2.0布局窗格– FlowPane和TilePane

FlowPanes和TilePanes是不错的布局窗格&#xff0c;如果您想一个接一个地连续地水平或垂直地布局子级&#xff0c;则可以。 它们彼此非常相似&#xff0c;因为它们都将子级布置成列&#xff08;在水平Flow / TilePane的情况下&#xff09;并按其宽度或行&#xff08;在垂直Flow…

EasyRMS录播管理服务器项目实战:windows上开机自启动NodeJS服务

本文转自EasyDarwin开源团队成员Penggy的博客&#xff1a;http://www.jianshu.com/p/ef840505ae06 近期在EasyDarwin开源团队开发一款基于EasyDarwin在录播服务器EasyRMS过程中,我采用node作为EasyRMS录播服务器录播管理服务器的开发平台,基于node开发关于设备管理,录像计划,录…

windows10搭建django1.10.3+Apache2.4

很多教程都是在linux上搭建&#xff0c;windows上似乎天生不太适合&#xff0c;但是我还是愿意试试这个坑。 首先 交代一下自己的环境 python3.5.2 64位 django 1.10.3 apache 2.4 64位 windows 10 重点在apache上。 python 和django 相信有兴趣看这篇文章的基本上也都已经了解…

深入理解计算机系统 视频教程,深入理解计算机系统1

第一章 计算机系统漫游代码段的生命周期hello.c#include int main(){printf("hello world!\n");return 0;}1.1 前序源程序(源文件)实际上就是一个由0和1组成的位(又成比特bit)序列,8个位被组组成一组,称为字节。每个字节表示程序中的某些文本字符(大部分的现代计算机…

Java与iOS对话:Java对象与Apple plist序列化

我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java&#xff08;尤其是基于Spring的应用程序&#xff09;与iOS应用程序集成。 背景 我正在将Java Webapp作为后端并且客户端是iOS设备的项目。 最近&#xff0c;我收到了创建Web服务的任务&#xff0c;该服…