[Django笔记] uwsgi + nginx 配置

时间:2022-01-26 23:49:08

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 ,大功告成

[Django笔记] uwsgi + nginx 配置