[Django笔记] uwsgi + nginx 配置
django 和 nginx 通过 uwsgi 来处理请求,类似于 nginx + php-fpm + php
安装nginx
略
安装配置uwsgi
pip install uwsgi
回想php-fpm安装完直接启动就完事了,好像只要配置php的路径
uwsgi的启动需要一大堆参数,可以写好一个配置文件 uwsgi_conf.ini,下面是一个demo:
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/var/www/path/to/django/
# 指定项目的application(django 目录的 wsgi.py)
module=pics.wsgi:application
# 指定sock的文件路径
socket=/var/www/path/to/django/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/var/www/path/to/django/script/uwsgi.pid
# 指定IP端口
http=127.0.0.1:80
# 指定静态文件
static-map=/static=/var/www/path/to/django/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 当服务停止的时候自动移除unix Socket和pid文件
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/var/www/path/to/django/script/uwsgi.log
配置文件解释:
- 通过
uwsgi [xxx.ini]
来启动服务 - pid, sock, log 三个文件跟这个 ini 文件可以统一在 django 目录下面新建一个script 文件夹存放
- nginx 是读取sock 来连接 uwsgi
- pid 文件非常重要, uwsgi 通过
uwsgi --stop [xxx.pid]
和uwsgi --reload [xxx.pid]
来停止和重启服务 - 因为uwsgi 是给nginx 做桥接,ip 为127.0.0.1. 我的http端口不是80,因此这里可以使用80
启动后,可以通过http://127.0.0.1来测试访问 django. (我在linux直接curl 127.0.0.1
测试)
nginx.conf 配置 uwsgi
本机配置了一个php服务,想通过子路径/pics
来访问 django:
# 指定项目路径uwsgi
location /pics {
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass unix:/var/www/path/to/django/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给
}
# 指定静态文件
location /pics/static/ {
alias /var/www/path/to/django/static/;
index index.html index.htm;
}
重启nginx nginx -s reload
,大功告成