Nginx与uWSGI部署Django生产环境的完整指南

纸上星河
纸上星河
发布时间:2026-10-14 | 7人浏览过
原创

本文详细讲解如何在Linux服务器上使用Nginx和uWSGI部署Django项目。从安装配置到解决静态资源(static/media)无法访问的问题,涵盖DEBUG模式调整、collectstatic命令使用及Nginx反向代理设置,帮助开发者顺利完成从开发到生产环境的迁移。

Nginx与uWSGI部署Django生产环境指南

暑期完成的小项目准备上线云服务器。起初尝试直接运行 `python3 manager.py runserver 0.0.0.0:80`,但这仅适用于Django的开发模式,且不支持多用户并发访问。为了实现生产环境的稳定运行,必须引入专业的Web服务器进行部署,这里选择Nginx。

选择Nginx的理由

关于Nginx的选择理由。

选择Nginex的原因。

Nginx具有轻量、简洁的特点,相比Apache更为轻便,且社区普遍推荐其用于Django部署。

环境安装与配置

安装步骤。

安装过程此处省略。建议Linux用户通过源码编译安装,因为包管理器安装的版本可能包含非官方的二次开发修改。使用官方原版更为稳妥。

uWSGI配置详解

uWSGI的作用。

为何需要uWSGI介入。

Nginx作为反向代理服务器,负责监听外部端口(如80),并将请求转发至内部端口(如8000)。用户实际访问的是Nginx,从而隐藏了后端真实端口。然而,Nginx本身不具备处理Django应用逻辑的能力,且单点代理仍受限于并发处理能力,因此需要uWSGI来处理多用户并发请求。

uWSGI的安装方法。


pip install uwsgi

配置文件详解。

首先查看项目目录结构。


FlyCold
├── FlyCold
│  ├── settings.py
│  ├── urls.py
│  └── wsgi.py
├── manage.py
├── SchoolBuy
│  ├── admin.py
│  ├── forms.py
│  ├── __init__.py
│  ├── models.py
│  ├── urls.py
│  └── views.py
└── templates

以下是精简后的目录树结构。项目名为FlyCold,包含FlyCold子目录和SchoolBuy子目录。主要业务代码位于SchoolBuy中,`settings.py` 位于FlyCold子目录,而 `manage.py` 位于FlyCold根目录。

安装完成后,需要创建配置文件。


# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8080
#真实服务的端口

# Django项目根目录 (绝对路径)
chdir      = /home/lyt/FlyCold

# wsgi.py文件在项目中的位置
module     = FlyCold.wsgi

# process-related settings
# master
master     = true

# 运行的进程数
processes    = 4

# ... with appropriate permissions - may be needed
# chmod-socket  = 664
# clear environment on exit
vacuum     = true

该 `.ini` 配置文件可放置于任意位置,启动时通过命令 `uwsgi --ini ***.ini` 指定路径即可加载配置。

Nginx反向代理配置

Nginx配置步骤。

找到 `nginx.conf` 文件,写入相应的服务器配置。


  server {
    #这里是访问时用到的端口
  listen    80;
    server_name localhost;

    charset UTF-8;
    #这块存让日志文件
    access_log /var/log/nginx/SchoolBuy_access.log;
    error_log  /var/log/nginx/SchoolBuy_error.log;


    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        #同uwsgi内容
        uwsgi_pass 127.0.0.1:8001;
        #链接超时时间
        uwsgi_read_timeout 30;
    }
  }

保存配置后重启Nginx服务,访问80端口即可看到部署效果。

静态资源处理与优化

常见问题排查。

部署后可能会发现网页静态资源(如Admin后台页面)加载异常,样式简陋。这是因为Django默认处理静态资源的方式与Nginx+uWSGI架构不兼容。实际上,静态资源处理应由Nginx负责,因其在此方面性能更优,Django不应承担此任务。

通常涉及两类静态资源:以 `/media/` 开头的用户上传文件和以 `/static/` 开头的网站原始资源(图片、视频、JS、CSS)。Django默认支持 `/static/` 的处理。要关闭Django对 `/static/` 的处理,只需在 `settings.py` 中将 `DEBUG` 设置为 `False`,此时Django将不再处理静态文件。

对于 `/media/` 目录,通常用于存储用户上传的图片。需在 `settings.py` 中进行相应配置。


MEDIA_URL = '/media/' #访问的前缀链接
MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置

接着在 `urls.py` 中添加相关路由配置。


from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

上述配置的含义是:当 `DEBUG=True` 时,Django会解析 `/media/` 请求,文件存储路径由第二个参数指定。

当部署为生产环境时,只需将 `DEBUG` 改为 `False`,Django便不再处理 static 和 media 文件,转而由Nginx接管。

静态文件收集。

Django提供了一个工具,用于收集项目中所有应用的静态文件,便于Nginx统一解析。

在 `settings.py` 中设置 `STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic')`,指定收集目录。

配置好目录后,运行命令 `python3 manager.py collectstatic` 即可将静态文件收集至指定目录。

Nginx解析静态文件配置。

同样需要在 `nginx.conf` 中进行调整。

首先,在配置文件顶部添加 `user root`。

声明由root用户运行Nginx,否则访问静态文件时可能会遇到权限不足的错误。

其次,在之前配置的 `location /` 之前,添加针对静态文件的处理块。


    location /static/ {
      autoindex on;
      alias /root/SchoolBuyWeb/collectedstatic/;
    }

    location /media/ {
      autoindex on;
      alias /root/SchoolBuyWeb/media/;
    }

注意确保 `alias` 后的路径与你设定的静态文件目录完全一致。

重启Nginx服务,此时静态资源应能正常访问。

以上即为Nginx结合uWSGI部署Django项目的完整流程,希望对各位开发者有所帮助,欢迎继续支持本站获取更多技术内容。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表