1. Gunicorn介绍
官网 官方文档
Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器。 从Ruby的独角兽(Unicorn )项目移植 该Gunicorn服务器与各种Web框架兼容,实现非常简单,轻量级的资源消耗 Gunicorn直接用命令启动,不需要编写配置文件
2. Gunicorn安装
pip install gunicorn
查看选项
gunicorn -h
常用配置参数说明如下。更多点击链接官网查看
3.1 命令行参数
不建议在命令行中配置很多的参数
-c
-w
-b
-D
--reload
gunicorn -w 2 -b 127.0.0.1:7000 运行文件名称:Flask程序实例名
命令行示例
gunicorn -w 2 -b 0.0.0.0:7000 app:app -D --reload
3.2 配置文件参数
【强烈建议】在配置文件中进行相关配置 官网配置参数 使用说明参照下图
配置文件示例
import multiprocessing
from pathlib import Path
bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'gevent'
threads = workers * 2
keepalive = 5
accesslog = str(Path.joinpath(Path.cwd(), 'static', 'log', 'gunicorn_access.log'))
errorlog = str(Path.joinpath(Path.cwd(), 'static', 'log', 'gunicorn_err.log'))
access_log_format = '%({X-Real-IP}i)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
用户访问日志相关的配置
accesslog = str(Path.joinpath(Path.cwd(), 'static', 'log', 'gunicorn_access.log'))
access_log_format = '%({X-Real-IP}i)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
从配置文件中读取的命令行示例
gunicorn -c gunicorn.py app:APP -D
4. Gunicorn日志中获取用户真实IP
Nginx中配置proxy_set_header X-Real-IP $remote_addr; Nginx示例:
location / {
# 请求转发到gunicorn服务器
proxy_pass http://127.0.0.1:5000;
# 请求转发到多个gunicorn服务器
# proxy_pass http://flask;
# 设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
# 设置请求头,传递原始请求ip给 gunicorn 服务器
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Gunicorn日志配置示例
access_log_format = '%({X-Real-IP}i)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
5. Shell脚本示例
因运行在Docker容器中服务需要经常性重启,且容器中只运行了一种类型Gunicorn服务,且为防止误杀进程,简单写了如下的重启脚本 。
#!/bin/bash
containerName="test"
currTime="date +'%Y-%m-%d %H:%M:%S'"
exist="docker inspect --format '{{.State.Running}}' ${containerName}"
if [ $? -ne 0 ] || [ "${exist}" != "true" ]; then
kill -9 "ps -ef | grep gunicorn | head -1 | awk '{print $2}'"
gunicorn -c gunicorn.py app:APP -D
echo "${currTime} Gunicorn服务重启"
else
echo "${currTime} 请在对应容器内执行此脚本"
fi
|