nginx -- 学习 -- + uwsgi部署django项目
2023-07-04
4 min read
1. 什么是nginx
- 轻量级的高性能3web服务器,提供了http代理和反向代理、负载均衡,使用c语言编写,效率极高。
- 一般使用uwsgi协议让nginx转发接收到的http协议给uWSGI(uwsgi协议是二进制,效率更高)
2. 安装nginx
sudo apt install nginx
安装成功之后输入nginx -v
查看版本。
PS. nginx安装之后会默认占用80端口
3. 配置nginx
/etc/nginx/site-enabled/default
是nginx的配置文件
核心参数
- location / 有点像路由 表示所有这个路由的请求都由下面的参数代表的服务处理
- uwsgi_pass 将服务以uwsgi传递给***地址(例如127.0.0.1:8000)
- include 配置参数 如果需要使用uwsgi协议需要写
/etc/nginx/uwsgi_params
4. 启动/停止nginx
sudo /etc/init.d/nginx start|stop|restart|status
分别代表启动|停止|重启|查看状态
PS. nginx只要修改就需要重启,否则配置不生效
5. 修改uwsgi配置文件,适配nginx,修改nginx,适配uwsgi启动
具体如下:
#default文件
# try_files $uri $uri/ =404; #注释掉这一句
uwsgi_pass 127.0.0.1:8000; #添加这两句
include /etc/nginx/uwsgi_params;
#uwsgi.ini
#去掉http 修改为 socket
socket = 127.0.0.1:8000 #这个端口号要和nginx的一致
PS. sudo nginx -t
可以快速方便的告诉你配置文件是否有语法错误
6. 排错
- 看日志文件! 访问日志:
/var/log/nginx/error.log
错误日志:/var/log/nginx/access.log
对应uwsgi日志 - 和uwsgi.ini
同级下的uwsgi.log
- 502 代表nginx反向代理成功,但是对应的uwsgi未启动;还有一种就是uwsgi设置接受请求过小,在uwsgi.ini中添加
buffer-size = 65536
- 主要还是得看日志 - 404(分两种:django报错/nginx报错) 一可能是路由不在django项目;二可能是没有禁止掉nginx配置文件里的
try_files
7. nginx静态文件配置
- 创建新文件夹 - 存放所有的django静态文件 -- 例如
/home/mysite_static/
- 在django setting.py中添加配置
STATIC_ROOT
代表静态文件路径 -- 例如/home/mysite_static/static/
- 进入django项目,执行
python3 mange.py collectstatic
- 收集项目所有的静态文件 - nginx配置文件新增加
location /static {
root /静态文件夹;
}
特别要注意路径,这个‘静态文件夹’下面还有一个static的文件夹,里面才是真正存放了所有的静态文件
8. 404/500 自定义报错页面
- 在django的模板文件夹内添加
404.html
文件,当视图触发http404的时候自动显示该页面(在debug=false的时候彩起作用) -- 添加完之后记得重启nginx、uwsgi等服务
9. 给原来的静态文件夹下新增文件夹,结果404
大概是因为项目中的静态文件路径和nginx的有所区别,
需要注意alias和root的区别,
nginx会根据请求的路径,去请求静态文件夹中可能存在的,文件夹中的静态文件。简而言之,nginx是可以嵌套的,但是前提是请求的路径需要对应的上。