新手学习前后端,用了华为云服务器。测试项目之前的环境是ubuntu下django+apache2,最后解决不了出现的编码问题,然后转用nginx,最后成功运行,说说过程及学习体会。
django+nginx+uwsgi网上教程一大堆,配置也非常灵活,开始都把我绕晕了,怎么网上说的都不同,最后终于发现,其实本质上都是相同的,要理解他们各自的作用就行了。
django是一套web开发框架,它自己也配有一套调试用的web服务器,但是其是仅仅是用于调试的,性能肯定不如专业的web服务器。
nginx就是专业的web服务器,我的理解就是用来处理httb申请及响应的。
uwsgi是django与nginx之间的桥梁,uwsgi直接来处理客户端发来的动态请求(静态的nginx可以直接处理掉),客户端发来的动态请求通过http到了nginx,nginx再通过socket发送给uwsgi+django处理。网上有图如下。
搞明白关系,再来配置就更加明白一些了。
有些前提条件,确保你的django项目在没有nginx+uwsgi的情况下,通过runserver的方式,客户端也能够正常访问,表示django工程没问题。
其次,通过sudo apt-get 方式安装了nginx,pip3 install uwsgi安装了uwsgi。
1、首先配置nginx。在/etc/nginx/sites-available下面文件一个project.conf。project是工程名。内容如下:
server {
listen 8000; #供客户端访问的端口
server_name 119.3.*.*; #供客户端访问的地址
charset UTF-8;
client_max_body_size 75M;
location / { #客户端的动态请求需要socket发送至uwsgi的配置地方
include uwsgi_params; #固定格式
uwsgi_pass 192.168.*.*:8001; #此处最好指明IP加端口,且此端口不要与上面的供客户端访问的端口重复。此处的IP+端口,需要与后面的project_uwsgi的配置文件一致,表示把动态请求发往这个地方去。
}
location /media { #静态数据,
# /home/projects/project/meida/;
alias /home/projects/project/media/; # your Django project's media files - amend as required
}
location /static { #静态数据,
# /home/projects/project/static/
alias /home/projects/project/static/; # your Django project's static files - amend as required
}
}
在把此文件建一个快捷方式,放入/etc/nginx/sites-enabled文件夹下,这样即可悲nginx自动读取。
sudo ln -s /etc/nginx/sites-available/project.conf /etc/nginx/sites-enabled/project.conf
然后,启动nginx,sudo service nginx reload 或者sudo service nginx restart
2,配置uwsgi
在django工程目录下,新建一个project_uwsgi.ini,与manage.py平级(这样简单些)。内容如下:
# project_uwsgi.ini file
[uwsgi]
# Django-related settings
socket = 192.168.*.*:8001 #绑定一个地址+端口,监听动态来自于nginx的socket的动态消息
# the base directory (full path)
chdir = /home/projects/project #包含manage.py的路径
# Django s wsgi file
module = project.wsgi
# process-related settings
# master
master = true #固定格式
# maximum number of worker processes
processes = 4 #固定格式
# ... with appropriate permissions - may be needed
# chmod-socket = 664 #固定格式
# clear environment on exit
vacuum = true #固定格式
然后启动uwsgi,在django项目目录下,通过uwsgi --ini project_uwsgi.ini读取配置文件启动。
3、至此,我的客户端可正常访问服务端。