千家信息网

解决nginx+uwsgi部署Django的所有问题(小结)

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,最近,自己暑假写的小项目也算完毕了,想着投放到自己云服务器上,本来以为只要打开端口运行python3 manager runserver 0.0.0.0:80就搞定了,最后才知道这只适用于Django
千家信息网最后更新 2026年11月03日解决nginx+uwsgi部署Django的所有问题(小结)

最近,自己暑假写的小项目也算完毕了,想着投放到自己云服务器上,本来以为只要打开端口运行python3 manager runserver 0.0.0.0:80就搞定了,最后才知道这只适用于Django的开发模式,只支持单用户访问,既然如此,那么就得需要web服务器进行部署了。我便使用了nginx

nginx?

为什么是nginx?

首先我觉得它小,很轻量级,用着简便,没有apache那么庞杂,并且网上都推荐nginx部署Django。

安装

这里直接略过,说一点Linux用户推荐大家源码安装,因为命令安装可能会自己装成一个淘宝二次开发的nginx,个人还是推荐用原版。

uwsgi

为何还需要这东西

简单来说,nginx属于反向代理服务器,他能做什么事呢?监听一个端口,比如说80,可以配置一个反向代理端口,比如8000,这样,所有外部用户对80端口的访问实际上都是请求了8000端口的数据,只是用户并非真实的在与8000端口交流,而是通过了80这座桥梁。目前自己只觉得这样能隐藏自己的真实端口,大家有什么高见请留言指出。
既然如此,那么实际上还是只能单用户访问,所以我们需要一个可以多用户并发访问的工具,那么便是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里,setting.py在Flycold子目录里,manager.py在FlyCold根目录里。

安装之后来一个配置文件,内容如下

# myweb_uwsgi.ini file[uwsgi]# Django-related settingssocket = :8080#真实服务的端口# Django项目根目录 (绝对路径)chdir      = /home/lyt/FlyCold# wsgi.py文件在项目中的位置module     = FlyCold.wsgi# process-related settings# mastermaster     = true# 运行的进程数processes    = 4# ... with appropriate permissions - may be needed# chmod-socket  = 664# clear environment on exitvacuum     = true

这个.ini文件可以放在任何地方,启动的时候uwsgi --ini ***.ini

配置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页面,会特别简陋,这是因为nginx+uwsgi+Django时,Django对静态资源的处理nginx不能代理(可能吧)。总之这种事不该让Django做,因为nginx在处理静态资源上能力更强,对于静态资源,就让nginx处理吧。

通常来说,你会有两种静态资源/media/开头的链接和/static/开头的。static用来处理一些网站原始图片,视频,js,css文件,Django是自己就支持这种链接的。那么如何关闭让Django处理/static/开头的文件呢,很简单,在setting.py中将DEBUG值改为False,这时,Django就不去处理/static/文件了。

那么/media/呢?一般来说,用户上传的图片,我们会保存起来,在网页上显示时候就用/media/,在setting.py中设置

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

再在url.py中添加

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

这里的意思是在DEBUG=True时,会解析/media/文件,文件存放的位置是第二个参数。

如此一来当即在部署为生产环境时,只需要吧DEBUG改为False,Django就不会去处理static和media了。

收集静态文件

Django有一个工具可以将应用里用到的所有静态文件收集起来,方便nginx解析。具体:

在setting.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,现在已经ok了~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

文件 端口 静态 处理 用户 配置 内容 资源 项目 链接 服务 位置 子目 子目录 工具 开头 服务器 目录 代理 推荐 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 互联网科技公司起名 互联网科技作文 腾讯科技 互联网女皇 撒么互联网科技公司 联恩商钥互联网科技有限公司 北京三清互联网科技 新华互联网科技2019 互联网大会黑科技排名 互联网科技商业 链环科技传统企业怎么转型互联网 燊美集互联网科技有限公司 科技互联网海报 互联网方面的科技前沿 黑科技 体验场景 互联网大会 济南小医互联网科技有限公司招聘 美国五大互联网科技公司市值多少 北京品多多互联网科技有限公司 保山浩联互联网科技有限公司 银川新华互联网科技学校招聘 广州万易互联网科技有限公司 科技赋能下的互联网金融 美国互联网保险保险科技 A股互联网金融科技公司 与互联网科技公司 佩信高科技互联网 开启互联网科技时代小说 湖南诚度互联网科技有限公司 广州千川互联网科技有限公司 利用互联网等科技手段
0