uwsgi参数详解
chdir=/data/blog/
项目所在路径在app加载前切换到当前目录, 指定运行目录module=blog.wsgi:application
加载一个项目里的WSGI模块同时启动文件的名称不需要加上.pyhome=/xxx/python3
设置python或者虚拟环境(virtualenv)路径。个人建议使用virtualenv来设置虚拟环境的路径(home|virtualenv|env|配置一个就行了)virtualenv=/xxx/env/blog
设置python或者虚拟环境(virtualenv)路径。个人建议使用virtualenv来设置虚拟环境的路径(home|virtualenv|env|配置一个就行了)venv=/xxx/env/blog
设置python或者虚拟环境(virtualenv)路径。个人建议使用virtualenv来设置虚拟环境的路径(home|virtualenv|env|配置一个就行了)master=true
启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。processes=2
启动的工作进程数(根据你服务器的配置去设定一般cpu数*2)threads=4
线程数(一般processes * 2)socket=127.0.0.1:8000(
可以指定8个socket选项)使用nginx时需要配置socket socket文件配置,则socket文件内容如下: -s 127.0.0.1:8000 -s 127.0.0.1:8001 socket参数配置127.0.0.1:8000这样就会监听到网络套接字 [uwsgi] ... socket = 127.0.0.1:8000 socket = 127.0.0.1:8001
socket-timeout=600
设置间隔socket超时时间wsgi-file=/root/test.py
指定wsgi文件路径,启动时加载该文件(一般测试uwsgi时用到)chmod-socket=666
给socket文件配置访问权限enable-threads=true
允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程vacuum=true
当服务器退出的时候自动清理环境,删除unix socket文件和pid文件pidfile=/var/run/uwsgi.pid
指定pid文件的位置,记录主进程的pid号reload-merc=8
设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了reload-mercy配置的如8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)harakiri=600
一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)
max-requests=5000
为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用,可以使用过该选项来防止内存泄漏。listen=100
设置socket的监听队列大小(默认:100)daemonize=/xxx//xxx/uwsgi.log
守护uWSGI日志文件路径disable-logging=true
不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中log-maxsize=50000000
以固定的文件大小(单位KB),切割日志文件。如上方log-maxsize = 50000000 就是50M一个日志文件buffer-size=32768
设置请求内容的最大值 (排除request-body),这一般映射到请求头的大小。默认情况下,它是4k。如果你接收到了一个更大的请求 (例如,带有大cookies或者查询字符串),那么你也许需要增加它。它也是一个安全度量,所以调整为你的应用需要,而不是最大输出。
http=xxx.xxx.xxx.xxx:8000
在指定地址上添加一个http路由器/服务器,如果直接使用uwsgi,那么就可以直接通过服务器的IP地址:端口号来访问http-timeout=600
设置内部http socket超时时间
更多的参数请看uwsgi核心选项
uwsgi安装与测试
- 安装uwsgi
pip install uwsgi
测试uwsgi
# test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] # python3 #return ["Hello World"] # python2
uwsgi --http :8000 --wsgi-file test.py
- 浏览器访问:
http://example.com:8000
排坑
- 坑一
如果通过supervisor来管理uwsgi,那么需要注意选项daemonize
和log-maxsize
就不要再配置了,不然就会报错"FATAL FAIL"
啥的错误。 - 坑二
如果完成了nginx+uwsgi+django的配置,但是有时候访问有的页面(注意是有的页面)会提示502 bad gateway
查看nginx的日志是这样的一行:Upstream prematurely closed connection while reading upstream...
出现这种情况可能是django处理请求时间很长,导致请求还没发出去,就被干掉了,这个时候可以调整harakiri
或者socket-timeout
参数的值,我自己现在的博客项目之前遇到就是这样就解决的。 - 坑三
如果没有设置log-maxsize,则会出现supervisor管理当前项目的日志只会输出到err.log里面
后续如果踩到新坑会再添加到该页面
强!
回复多谢夸奖。也有许多地方做不好。共同进步,朋友。
回复test
回复