django8.5 项目部署——Nginx

django 项目部署——Nginx

  1. 概念:
      Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡等一系列重要的特性。由C语言编写,执行效率高。

    1. 作用:
        负载均衡,多台服务器轮流处理请求。
        反向代理(nginx接到请求之后,可以把这个请求转发给后边的若干uWSGI,再给运行着Django的机器)
    2. 原理:客户端请求nginx,再由nginx将请求转发给uWSGI,再给Django。
  2. 安装:sudo apt install nginx,这是系统级的组件,所以要拿apt来装,安装完毕之后,可以输入nginx -v查看。

  3. 配置:

    1. 修改nginx的配置文件: /etc/nginx/sites-enables/default , sudo vim该文件.

      #在server节点下添加新的location项,指向uwsgi的ip和端口。
      server {
      		...
      		location / {
      		#禁掉try_files
      		uwsgi_pass 127.0.0.1:8000; #重定向到127.0.0.1的8000端口(所有/ 开头的请求,都用uwsgi的协议转发给127.0.0.1:8000)
      		include /etc/nginx/uwsgi_params; #将所有的参数转到uwsgi下
      		}
      }
      
    2. 改完之后就重启nginx:

      sudo /etc/init.d/nginx restart.

      用到的命令有:sudo /etc/init.d/nginx start|stop|restart|status或者sudo service nginx start|stop|restart|status

      注意:nginx配置只要修改,就需要重启,否则配置不生效。sudo nginx -t 可以检查修改之后语法有没有问题。

    3. 修改uWSGI配置:

        说明nginx负责接收请求,并把请求转发给后面的uWSGI,此模式下,uWSGI需要以socket模式启动,修改项目同名目录下的uwsgi.ini文件。

      [uwsgi]
      socket=127.0.0.1:8000 #把http=127.0.0.1:8000注释掉
      

        改完之后,再重启uWSGI(cd到能看见uwsgi.ini的那个文件夹,再输入命令。uWSgi开着的话就先停掉,sudo uwsgi --stop uwsgi.pid,停下之后一定要ps aux|grep 'uwsgi'检查一下,是不是停止成功。再启动sudo uwsgi --ini uwsgi.ini,启动之后也ps aux|grep 'uwsgi'检查是否启动启动成功)

        nginx监听的是80,uWSGI监听的是8000,那么测试效果时,浏览器中输入的地址端口号应该是80,因为默认的就是80,所以可以直接访问127.0.0.1开头的地址,例如127.0.0.1/test_upload或者127.0.0.1:80/test_upload.

  4. 常见问题:(如果涉及到权限较高的很多操作,可以先sudo su进入超级用户,后边就能正常使用命令了)

    1. 排查错误时可以看日志:
      1. nginx日志位置:
        异常信息 /var/log/nginx/error.log ;
        正常信息 /var/log/nginx/access.log
      2. uwsgi日志文件:在项目同名目录下,uwsgi.log
    2. 访问127.0.0.1:80 地址,出现502响应:
        502响应表示nginx反向代理配置成功,但是对应的uWSGI未启动,解决方法就是cd到uwsgi.ini在的那个文件夹,uwsgi --ini uwsgi.ini 启动
    3. 访问127.0.0.1:80/url 出现404响应:有两种情况:
      1. 如果是一个很“django”的黄色报错页,估计就是写的路由错了,当前的这个路由没在django中配置。
      2. 也可能是nginx配置错误,没有禁掉try_files。
  5. nginx静态文件配置:

    1. 创建新路径:主要存在Django的所有静态文件,如:/home/tarena/项目名_static/

    2. 在Django的settings.py中添加新配置:STATIC_ROOT='/home/tarena/项目名_static/static ; STATIC_ROOT是正式上线之后,静态文件的存储目录 ; 防止路径拼错,可以使用pwd命令看一下,直接复制。

    3. 进入项目目录后,执行python manage.py collectstatic(只要有静态文件的添加,就要执行这条命令), 执行该命令后,Django将项目中所有静态文件复制到STATIC_ROOT中,包括Django内建的静态文件。

    4. 静态文件收集好之后,得告诉nginx什么样的请求是静态资源请求,以及这个请求来了之后,nginx该去怎么处理:

        在nginx配置中添加新的配置:修改 /etc/nginx/sites-enabled/default,(sudo vim,否则权限不够。)新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可。

      server {
      		...
      		location /static {
      		#root 第一步创建的文件夹的绝对路径,如:
      		root /home/tarena/项目名_static;
      		}
      }
      

      添加location没有顺序要求.

      添加完之后记得保存退出,Esc->:wq->回车 ,然后重启nginx,使用命令sudo /etc/init.d/nginx restart

  6. 404/500页面:
      在模板文件中添加404.html模板,当视图触发Http404异常时将会被显示。404.html仅在发布版中(即settings.py中的DEBUG=False时)才起作用。
      当响应处理函数触发Http404异常时就会跳转到404界面。

  7. 邮箱告警:

    1. 当正式服务器上代码运行有报错时,可以将错误追溯信息发送至指定的邮箱:
      在settings.py中 —— 在基础邮箱授权后,添加如下配置:
      # 关闭调试模式
      DEBUG = False
      # 错误报告接收方
      ADMINS = [('xxx', 'xxxxxxx@example.com'), ('yyy', 'yyyyyyy@example.com')]
      # 发送错误报告方,默认为root@localhost账户,多数邮件服务器会拒绝,所以改成email配置中的邮箱,也就是授权的那个邮箱
      SERVER_EMAIL = 'email配置中的邮箱'
      
    2. django可以把报错邮件中的敏感信息用*过滤掉:
      1. 过滤局部变量:使用sensitive_variables()装饰器(多个装饰器时得放在最上边)

        from django.views.decorators.debug import sensitive_variables
        @sensitive_variables('user', 'pw', 'cc')  # 参数就是想过滤掉的数据的变量名
        def process_info(user):
            pw = user.pass_word
            cc = user.credit_card_number
            name = user.name
            ...
        
        
      2. 过滤POST数据:

        from django.views.decorators.debug import sensitive_post_parameters
        @sensitive_post_parameters('password', 'username')
        def index(request):
            s = request.POST['username'] + request.POST['abcd']
            # 'abcd' 并不存在,此时会引发error,POST中的username和password的值就会被替换为 ****
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值