当前位置: 首页> 技术教程> 正文

Django Nginx教程

宁旺春土特产品

在现代Web应用开发与部署的技术栈中,Django作为Python生态下最成熟的全栈Web框架,凭借其自带的ORM、Admin后台、权限管理等丰富组件,能够帮助开发者快速完成业务逻辑的搭建与迭代,但Django自带的开发服务器仅适用于本地调试场景,不仅无法承受生产环境的高并发请求,也不具备静态文件处理、SSL加密、反向代理等生产级能力,这时候就需要Nginx作为前端代理服务器,与Django配合构建稳定、高效的生产部署架构,二者的组合也成为了Python Web项目部署的黄金标准,被广泛应用于各类中小型乃至大型互联网项目中。

Django Nginx教程

要理解Django与Nginx的协作逻辑,首先需要理清二者在整个部署架构中的角色分工。Django的核心职责是处理动态请求,也就是解析用户提交的参数、调用业务逻辑代码、操作数据库并生成动态响应内容,但它本身对静态资源(比如CSS、JS、图片、字体文件)的处理效率很低,也不适合直接暴露在公网承接所有用户请求。而Nginx作为高性能的HTTP和反向代理服务器,擅长处理高并发连接、静态文件分发、请求负载均衡、SSL证书配置以及访问控制等工作,二者配合时,用户的所有请求首先到达Nginx,Nginx会根据请求的类型进行分流:如果是静态资源请求,Nginx直接从服务器本地的静态文件目录读取文件并返回给用户,完全不需要经过Django处理;如果是动态业务请求,Nginx则会将请求转发给后端运行Django的WSGI服务器(比如uWSGI或者Gunicorn),再由WSGI服务器调用Django的应用实例处理请求,最后将响应结果原路返回给用户。

整个部署流程的第一步是完成Django项目的生产环境配置,这一步是后续Nginx能够正确对接的基础。首先需要修改Django项目的settings.py文件,将DEBUG参数设置为False,开启生产模式,避免调试模式下的敏感信息泄露;同时需要配置ALLOWED_HOSTS参数,填入你的服务器域名或者公网IP,只允许指定的域名访问项目,防止恶意主机头攻击。接下来要处理静态文件的收集,在settings.py中添加STATIC_ROOT配置项,指定一个目录用来存放所有收集到的静态文件,比如STATIC_ROOT = '/var/www/myproject/static/',然后在项目根目录下执行python manage.py collectstatic命令,Django会自动把Admin后台、各个应用以及项目自定义的所有静态文件都复制到这个指定目录中,方便后续Nginx直接读取。除此之外,还需要配置媒体文件的存储路径,也就是MEDIA_ROOT和MEDIA_URL,用户上传的图片、文档等资源都会存放在MEDIA_ROOT对应的目录下,后续Nginx也需要单独配置这个目录的访问规则。

完成Django端的配置后,接下来需要部署WSGI服务器来运行Django应用,这里以更常用的Gunicorn为例进行说明。首先通过pip install gunicorn命令在项目的虚拟环境中安装Gunicorn,然后进入项目根目录,执行gunicorn --bind 127.0.0.1:8000 myproject.wsgi:application命令启动服务,这里的myproject需要替换成你的项目名称,--bind参数指定了Gunicorn只监听本地的8000端口,不对外网开放,所有请求都必须通过Nginx转发进来,保证了后端服务的安全性。为了让Gunicorn能够在后台稳定运行,并且在服务器重启后自动启动,通常会将其配置成Systemd服务,在/etc/systemd/system/目录下创建一个gunicorn.service文件,配置服务的工作目录、虚拟环境路径、启动命令、用户组以及重启策略等,配置完成后执行systemctl daemon-reload重载配置,再通过systemctl start gunicorn和systemctl enable gunicorn命令启动服务并设置开机自启。

接下来就是核心的Nginx配置环节,首先需要确保服务器上已经安装了Nginx,可以通过apt install nginx或者yum install nginx命令进行安装。安装完成后,进入/etc/nginx/sites-available/目录,创建一个新的站点配置文件,比如myproject,然后在文件中写入具体的配置规则。首先配置server块,监听80端口,server_name填写你的域名或者IP地址;然后配置静态文件的location块,location /static/ 对应的alias路径指向之前配置的STATIC_ROOT目录,也就是/var/www/myproject/static/,同时可以添加expires参数设置静态资源的缓存时间,提升用户二次访问的速度;同理配置/media/的location块,alias指向MEDIA_ROOT对应的目录,处理用户上传的媒体文件。最后配置动态请求的转发,location / 块中使用proxy_pass指令将请求转发到Gunicorn监听的本地地址,也就是http://127.0.0.1:8000,同时需要设置proxy_set_header参数,将Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto等请求头传递给后端Django,让Django能够获取到真实的用户IP和请求协议,避免出现重定向错误或者IP获取异常的问题。配置完成后,需要创建一个软链接到sites-enabled目录,执行ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/,然后执行nginx -t命令检查配置文件是否有语法错误,如果提示test is successful,就可以执行systemctl reload nginx命令重载Nginx配置,让配置生效。

为了提升网站的安全性和用户信任度,通常还需要为网站配置HTTPS加密,这一步同样可以通过Nginx轻松实现。可以使用Let's Encrypt提供的免费SSL证书,通过certbot工具一键申请和配置,只需要执行certbot --nginx命令,按照提示选择对应的站点域名,certbot会自动生成证书文件,并且修改Nginx的配置文件,添加443端口的监听、SSL证书路径配置以及HTTP请求自动

PC右下角
wap底部