nginx -- 学习 -- + uwsgi部署django项目

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是可以嵌套的,但是前提是请求的路径需要对应的上。

10. alias与root的区别

csdn参考