Django + uwsgi + Nginx处理静态文件及动态路由

据说,据说哈,Nginx 这个东西用于请求静态文件很厉害,具体表现在速度很快,前几天我在网上查找了一些教程,然后自己动手试了一下,快不快还不知道,但是这几样东西确实是可以结合在一起的,接下来就来记下我这几天走过的路,以下是目录。

1. 开启一个Django项目,创建 static 目录
2. 安装 Nginx ,开启Nginx服务
3. 安装 uwsgi 通过uwsgi 启动 Django
4. Nginx + uwsgi 开启Django 项目,访问静态文件
5. 创建路由,确认动态路由由Nginx 转发到Django

1、开启一个Django项目,创建 static 目录

在进入这个项目前,最好对于 Django 创建一个项目之类的有个基本的了解,如果不,那也没关系,照着我写的做就行……
在 Ubuntu 的用户下,我的用户名是 hunter, 创建直接创建一个项目,命令如下:

django-admin start project hunter 

其中, hunter 为我的项目名称,所以这个项目的跟目录在 /home/hunter/hunter 下,进去以后看起来是这个样子的:
在这里插入图片描述
在 Django 的项目路径下,可能我这里有一些文件及文件夹比你多,不要紧,因为这都是后面创建的。
到了这里你可以到 含有配置文件 settings.py 的文件夹下看看,有个 wsgi.py 文件,这个是自动生成的,后面在 uwsgi 的服务中会用到,但我们不用修改它。

然后我们创建一个静态文件夹,用于存放我们的静态文件:

mkdir static

然后 cd 进入这个文件夹,创建一个文件,就叫做 index.html,文件内容如下:

<h1>SUCCESS</h1>

然后,我们测试一下这个 Django 的项目是否是正确的,在 /home/hunter/hunter/ 下 执行:

python3 manage.py runserver 0.0.0.0:8080

然后登陆浏览器, 输入 127.0.0.1:8080 看到 Django 系统特有的一个小火箭,就说明启动成功了。
我们的第一步就完成了。

但接着我们要做一个测试,访问一下 Django 系统自带的一个 admin 的界面,在浏览器输入:

127.0.0.1:8080/admin

可以看到一个登陆界面,这个接口我们后面会用到。

2、 安装 Nginx ,开启Nginx服务

然后安装 Nginx ,执行如下命令:

sudo apt-get install nginx

可能有的会报错之类的,记得更新下 apt 之类的东西。
然后我们通过如下命令启动 Nginx:

sudo  /etc/init.d/nginx start

然后就可以看到 Nginx 的一个特有的欢迎页面。
到这里,我们的 Nginx 就装好了,具体参数之类的我们到后面再调。

3、安装 uwsgi 通过uwsgi 启动 Django

然后,我们要安装 uwsgi 这个Python 的依赖,执行:

sudo pip3 install uwsgi

然后,这里本来是有一个命令,可以通过这个命令单独启动 Django 的,但是参数什么的懒得记,这里就不做赘述了,但这里要明确一点的是:
这个作用是通过 uwsgi 来启动 Django 服务,Django 的启动命令就不用再单独运行了。

然后我们把这个命令写到一个文件里,放在Django 系统的根目录下,也就是 /home/hunter/hunter/ 下,文件名为 uwsgi.ini,其内容如下:

[uwsgi]

socket    = :4589
chdir     = /home/hunter/hunter
module    = hunter.wsgi
master    = true
processes = 4
vacuum    = true
其中: 
socket 后面设置的端口 需要记一下,后面在 Nginx 会用到
chdir 的参数为Django根目录的位置
module 的参数就是我们上面说的 会自动生成的 wsgi 文件的位置
processes 为进程数

注意:第一行的 [uwsgi]  一定要加上的,因为我删除过,然后启动,就不起作用了

这个配置文件的启动方式如下:

在/home/hunter/hunter,也就是 Django 系统的根目录下,执行:
uwsgi --ini uwsgi.ini &

我们现在可以启动,也可以后面再启动,如果启动了,我们可以通过

ps aux | grep uwsgi 

来查看启动的进程。

4、Nginx + uwsgi 开启Django 项目,访问静态文件

现在到了这一步,uwsgi 已经和 Django 结合在一起了,如何把 Nginx 和Django 和 uwsgi 结合在一起呢?
我们先来配置一下 Nginx 的参数,配置 Nginx地址在 /etc/nginx/site-available/default
记得使用 sudo vim 来进行编辑,

sudo vim /etc/nginx/site-available/default

把原有的文件删删减减,最后可以得到如下的参数:


server {
	listen 80;			#表示 Nginx 默认监听的是80端口
	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;
	server_name localhost;

	location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:4589;	#这两行参数表示和uwsgi 结合,而且这个端口号就是前面 uwsgi 开启Django 项目的端口号,这是一个服务器对内的端口号,80为对外的,收到请求后如果是动态路由,则转发给这个端口的服务进行处理
        uwsgi_read_timeout 2;
	}
    location /static {	#这里就是静态文件的配置
        expires 30d;
        autoindex on;
        add_header Cache-Control private;
        alias /home/hunter/hunter/static/;	#这里是Django项目静态文件地址,也是请求服务以后,直接获取的地址
    }
}

然后,我们把 Nginx 重启一下:

sudo /etc/init.d/nginx restart

然后,如果 uwsgi 还没有启动的话,要启动一下:

在Django系统的根目录下:
uwsgi --ini uwsgi.ini &

然后我们就可以访问我们在前面创建的那个静态文件地址了,
127.0.0.1/static/index.html

因为80 是默认端口,所以访问的时候可以不用写,如果在服务器上这个端口被占用,可以在 Nginx 配置的 listen 后面写上自己的端口,浏览器访问的时候加上端口即可,可以看到如下显示:
在这里插入图片描述
当然,这只是访问静态文件,如果是要访问 Django 的动态路由呢,我们怎么验证呢?

5、确认动态路由由Nginx 转发到Django

我们通过 uwsgi 把 Django 服务启动起来了,然而我们在浏览器访问的却是 Nginx 的端口,如何确认 Nginx 是把这动态的路由转发给了Django 呢?
很简单,我们通过这个 Nginx 的端口 访问一个Django的接口,如果能够正确访问不就证明我们的结果了吗?

这就用到我们开始说过的 /admin 那个接口。我们访问 Nginx 端口下的单 /admin:

127.0.0.1:/admin

可以看到这样一个界面:
在这里插入图片描述
这个页面跟我们之前看到的 登陆界面好像不太一样。

没错!就是不一样,因为 Nginx 掌控了Django 的静态文件的访问,所以Django 的这个接口的一些静态 css 文件之类的都访问不到了,不过没关系。这个接口能够访问就足以证明我们的结论了。

啊,深夜了,还在写这篇博客,我好累~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值