- 前言
- 1. uwsgi的安装
- 2. nginx配置
- 3. uwsgi.ini配置
主要通过uwsgi来启动django框架
关于uwsgi的详细讲解也可查看:官方文档说明
1. uwsgi的安装先安装这个uwsgi,主要通过命令如下:
- pip install uwsgi
或者可通过源码进行安装:
- 下载安装包,wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
- 解压缩,tar zxvf uwsgi-latest.tar.gz
- cd uwsgi-latest
- 编译执行,make
书写一个测试包:(命名为foobar.py)
具体代码如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
本身上面的代码就是一个应用程序,可通过uwsgi加载器加载。
将其启动在一个http服务器上:uwsgi --http 127.0.0.1:9000 --wsgi-file foorbar.py,以9000的端口进行暴露
之后在本地计算机中以:http://127.0.0.1:9000打开网址即可
关uwsgi的参数比较多,可通过uwsgi --help进行查看
加以多个进程或者多个线程执行,可通过如下参数:
- processes 进程数
- threads 线程数
uwsgi支持多种与Web服务器集成在一起,处理自已的HTTP请求
在公司的的生产环境中,一般会配合nginx或apache使用
关于nginx的相关知识点可看我之前的文章:
Nginx从入门到精通(全)
Nginx配置静态网页访问(图文界面)
server {
# 监听端口
listen 18084;
# 域名或者ip
server_name xxxx.com;
charset utf-8;
client_max_body_size 5M;
root /usr/share/nginx/www;
set $BASE_DIR "/home/xx/webservice/audioadmin";
error_log /home/xx/logs/nginx_error.log;
access_log /home/xx/logs/nginx_access.log;
proxy_intercept_errors on;
# 动态请求nginx给uwsgi
location / {
# 转发端口必须和uwsgi配置文件中socket端口一致
uwsgi_pass audioadmin;
# 转发请求的参数
uwsgi_param Host $host;
uwsgi_param Via "nginx";
uwsgi_send_timeout 600;
uwsgi_connect_timeout 600;
uwsgi_read_timeout 600;
include uwsgi_params;
}
# 静态资源所在位置,nginx自己处理
location ^~ /static/ {
alias /home/xx/static/;
# 过期时间设置
expires 1d;
}
}
nginx安装完毕后,会有自带一个uwsgi_params文件
这些参数文件主要是:转发请求时要携带的内容(比如查询字符串、请求方法、内容类型等)
修改了配置文件,需要重启nginx服务
3. uwsgi.ini配置由于上面已经和nginx搭配在一起,所以使用的是socket链接方式
除了socket的连接方式之外还有一种是http方式
[uwsgi] #项目目录 chdir=/home/xx home=/home/xx/.virtualenvs/audioadmin/ # 引入的环境变量名 env=DJANGO_SETTINGS_MODULE=audioadmin.settings #项目中wsgi.py文件的目录,也就是项目目录 wsgi-file=%(chdir)/audioadmin/wsgi.py # 存放进程编号的文件 pidfile=%(chdir)/logs/uwsgi.pid #使用 Nginx 连接时使用,Django程序所在服务器地址 socket=%(chdir)/logs/audioadmin.sock #直接做 Web 服务器使用,Django程序所在服务器地址(以上两者二选一) # http=192.168.63.132:8001 # 启动用户名和用户组 uid=xx gid=xx # uwsgi服务器的角色,启用主线程 master=true # 进程数 processes=16 listen=1024 # 权限设置 chmod-socket=666 logfile-chmod=644 # 自动移除unix Socket 和 Pid 文件 当服务停止的时候 vacuum=true auto-procname=true procname-prefix-spaced=audioadmin disable-logging=true touch-reload=/home/xx/cgi_reload_file/audioadmin # 日志文件的输出 daemonize=uwsgi.log # 指定依赖的虚拟环境 virtualenv=/usr/bin/python # 缓冲区的大小 buffer-size=32678
以上代码模块是通过socket和nginx进行结合
如果通过http进行结合,nginx就使用不到
[uwsgi] # 项目目录 chdir=/home/xx/audioadmin home=/home/xx/.virtualenvs/audioadmin module=audioadmin.wsgi virtualenv=/home/xx/.virtualenvs/audioadmin user=@(exec://whoami) wsgi-file=audioadmin/wsgi.py pidfile=%(chdir)/logs/uwsgi.pid master=true processes=5 listen=16 # 主要的区分点在于这 http=:19866 # 这部分跟上面差不多 chmod-socket=666 logfile-chmod=644 vacuum=true auto-procname=true procname-prefix-spaced=audioadmin disable-logging=true touch-reload=%(chdir)/audioadmin/wsgi.py buffer-size=32768
- uwsgi 启动项目:uwsgi --ini uwsgi.ini
- 查看进程:ps aux | grep uwsgi或者使用ps -ef | grep uwsgi
如果想停止运行通过:uwsgi --stop uwsgi的进程号即可



