zoukankan      html  css  js  c++  java
  • 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"

    Identifier Description
    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 设置错误日志的存放地址

    用法:--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

  • 相关阅读:
    「暑期集训day23」黑幕
    暑期集训day23考试整理
    「暑期集训day22」黑色
    暑期集训day22考试整理
    「暑期集训day21」往复
    「暑期集训day20」仰望
    日常报错
    Spring-Boot环境的快速搭建
    jsp和thymeleaf模板
    Boot的简单配置
  • 原文地址:https://www.cnblogs.com/nanrou/p/7026789.html
Copyright © 2011-2022 走看看