wsgi,全称是web service gateway interface(网络服务网关接口) 它不是 web sever,也不是 web application,它是在 server 和 application 之间的一种协议和规范。 WSGI 的目的就是解耦 web server 和 web application,它包括两个部分,server 和 application, server 用来接收 web 客户端的请求,application 用来接收 server 传来的请求,然后传给 web server。gunicorn
gunicorn是一种unix上被广泛使用并且高性能的Python WSGI UNIX HTTP Server,目前不支持windows系统 和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。 gunicorn是实现了WSGI议的web服务器,可以使用gunicorn来得到更好的并发性能。gunicorn配置参数
-c CONFIG:CONFIG,配置文件的路径,通过配置文件启动;生产环境使用; -b ADDRESS:ADDRESS,ip加端口,绑定运行的主机; -w INT, --workers INT:用于处理工作进程的数量,为正整数,默认为1; -k STRTING, --worker-class STRTING:要使用的工作模式,默认为sync异步,可以下载eventlet和gevent并指定 --threads INT:处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1。 --worker-connections INT:最大客户端并发数量,默认情况下这个值为1000。 --backlog int:未决连接的最大数量,即等待服务的客户的数量。默认2048个,一般不修改; -p FILE, --pid FILE:设置pid文件的文件名,如果不设置将不会创建pid文件 --access-logfile FILE:要写入的访问日志目录 --access-logformat STRING:要写入的访问日志格式 --error-logfile FILE, --log-file FILE:要写入错误日志的文件目录。 --log-level LEVEL:错误日志输出等级。 --limit-request-line INT:HTTP请求头的行数的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。值是0~8190的数字。 --limit-request-fields INT:限制HTTP请求中请求头字段的数量。此字段用于限制请求头字段的数量以防止DDOS攻击,默认情况下,这个值为100,这个值不能超过32768 --limit-request-field-size INT:限制HTTP请求中请求头的大小,默认情况下这个值为8190字节。值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制 -t INT, --timeout INT:超过这么多秒后工作将被杀掉,并重新启动。一般设定为30秒; --daemon:是否以守护进程启动,默认false; --chdir:在加载应用程序之前切换目录; --graceful-timeout INT:默认情况下,这个值为30,在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死;一般使用默认; --keep-alive INT:在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。 --reload:默认为False。此设置用于开发,每当应用程序发生更改时,都会导致工作重新启动。 --spew:打印服务器执行过的每一条语句,默认False。此选择为原子性的,即要么全部打印,要么全部不打印; --check-config:显示现在的配置,默认值为False,即显示。 -e ENV, --env ENV:设置环境变量;nginx
nginx也是一中web服务器,但是它与gunicorn还是存在差异的 nginx没有实现WSGI协议 nginx可以做请求转发,负载均衡 等等 nginx用来处理静态资源,并将动态请求转发给gunicorn gunicorn再来处理动态请求用一张图来了解相互之间的关系 gunicorn+flask+nginx部署 1.首先需要安装python依赖环境
使用 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 命令2.安装python3
把 Python-3.7.4.tgz 文件保存在服务器上 安装建议安装在 /usr/local/python3 创建目录命令: mkdir -p /usr/local/python3 解压 Python-3.7.4.tgz文件 解压命令: tar -zxvf Python-3.7.4.tgz3.编译安装
>>> cd Python-3.7.4
>>> ./configure --prefix=/usr/local/python3
>>> make && make install
如果make && make install 提示错误ModuleNotFoundError: No module named '_ctypes'
执行 yum install libffi-devel -y
原因:Python3中有个内置模块叫ctypes,它是Python3的外部函数库模块,它提供兼容C语言的数据类型,并通过它调用Linux系统下的共享库(Shared library),此模块需要使用CentOS7系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。
由于在CentOS7系统中没有安装外部函数库(libffi)的开发链接库软件包,所以在安装pip的时候就报"ModuleNotFoundError: No module named '_ctypes'"。
4.创建python3软连接
>>> ln -s /usr/local/python3/bin/python3 /usr/bin/python35.将/usr/local/python3/bin加入PATH
>>> vi ~/.bash_profile
PATH=$PATH:%HOME/bin:/usr/local/python3/bin export PATH 修改完后按esc,输入:wq保存退出
执行 source .bash_profile 命令,让修改的文件生效6.创建python虚拟环境
创建一个没有pip的虚拟环境 >>> python3 -m venv --without-pip venv 激活虚拟环境 >>> source venv/bin/activate 查看python指向有没有值错 >>> which python 查看python版本 >>> python -V 开始安装pip >>> wget https://bootstrap.pypa.io/get-pip.py >>> python get-pip.py 查看pip版本 >>> pip -V 测试pip是否可用 >>> pip install Cython 安装环境依赖包 >>> pip install -r requirements.txt >>> pip list 查看软件包是否安装成功 启动gunicorn >>> gunicorn -c gunicorn.conf.py main:app -D -D意思是后台运行7.安装nginx
把nginx-1.9.9.tar.gz 文件放到服务器
解压压缩包
>>> tar -zxvf nginx-1.9.9.tar.gz
将解压后的文件移动到/usr/local目录下
>>> mv nginx-1.9.9 /usr/local
>>> cd /usr/local/nginx-1.9.9
配置编译安装
>>> ./configure
>>> make && make install
查看安装路径
>>> whereis nginx
cd 到安装 whereis nginx 命令输出的路径
更改nginx配置文件
到 whereis nginx 命令输出的路径下的conf目录
server{
list 80;
server_name localhost;
location / {
# root html
# index index.html index.htm
# 只需要修改这里
proxt_pass http://127.0.0.1:8000 # 这里指向的端口是gunicorn配置的端口
}
}
进入sbin目录,执行nginx文件
>>> cd sbin
>>> ./nginx
查看linux进程
>>> ps -ef | grep nginx
查看gunicorn进程
>>> pstree -ap|grep gunicorn
附件安装包
链接:https://pan.baidu.com/s/1LjjEfk1gV3qcRqU0V1iv9Q
提取码:ch13



