当前位置: 首页 > news >正文

Django项目nginx转uWSGI问题

主要在于3个方面:
1. 关于Nginx配置
2. 关于uWSGI配置
3. 关于环境(重要)

nginx:主要是做域名、掩饰内部服务器端口(uwsgin)和负载均衡,相当于中间层统一收到关于域名下的所有路由请求并转发给对应的WEB服务器处理

uWSGI:实际处理请求的服务器,我用它加载Django项目

环境:重要!!!! Django不同版本间存在很大的差异,一定要建立虚拟环境,下载对应的Python版本配置对应的Django版本,用虚拟环境启动的uWSGI来部署项目,否则会报错。

原因:因为当前Python将sqlite3嵌入到python中,不能额外下载部署版本,Python3.14版本前后还对sqlite进行改变。而Django在各大版本中会有用到sqlite3,那就会出现版本不兼容的问题,所以必须对应版本,否则启动起来了也用不了,会告诉你sqlite版本太低(3.7),要更高的Python

python runserver manang.py

Nginx配置:/etc/nginx/nginx.conf (或者你自己找到你的Nginx在哪)

在已经存在的http里面加入 include /etc/nginx/conf.d/*.conf,这是为了能方便对配置进行修改,防止后面找不到或者弄混,配置文档太长

http { include /etc/nginx/conf.d/*.conf; }

然后随便写一个 /etc/nginx/conf.d/你随便取名.conf

upstream django { server 127.0.0.1:8008; # 本地 uWSGI keepalive 256; } server { listen 80; server_name localhost; charset utf-8; client_max_body_size 75M; # 日志 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # 静态文件(根据实际路径调整) location /static/ { alias /home/project/new_django/staticfiles/; expires 30d; add_header Cache-Control "public, immutable"; } # 媒体文件 location /media/ { alias /home/project/new_django/mediafiles/; expires 30d; } # Django 应用 - 使用 uWSGI location / { uwsgi_pass django; include uwsgi_params; uwsgi_connect_timeout 300s; uwsgi_read_timeout 300s; uwsgi_send_timeout 300s; uwsgi_buffer_size 32k; uwsgi_buffers 8 32k; # 设置请求头 uwsgi_param Host $host; uwsgi_param X-Real-IP $remote_addr; uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; uwsgi_param X-Forwarded-Proto $scheme; } }

Django项目的manag,py同层级,写一个uwsgin.ini文件

然后用虚拟环境下的uwsgi启动即可

# Python 环境 # 使用虚拟环境(如果有) virtualenv = /home/project/new_django/venv # 或者设置 Python 路径 # python-path = /home/project/new_django/venv/lib/python3.10/site-packages # 项目设置 chdir = /home/project/new_django wsgi-file = new_django/wsgi.py module = new_django.wsgi:application # 进程管理 master = true processes = 4 threads = 2 max-requests = 5000 vacuum = true die-on-term = true # 网络设置 - 重要!使用 127.0.0.1 而不是 0.0.0.0 socket = 127.0.0.1:8008 # 如果 Nginx 和 uWSGI 在不同机器,才用 0.0.0.0 # socket = 0.0.0.0:8008 # 权限设置 chmod-socket = 666 chown-socket = nginx:nginx # 或者如果用户不同 # chown-socket = your_user:your_group # 缓冲区设置(防止大请求出错) buffer-size = 32768 post-buffering = 8192 # 超时设置 harakiri = 300 socket-timeout = 300 http-timeout = 300 # 日志设置(使用绝对路径) daemonize = /home/project/new_django/logs/uwsgi.log pidfile = /home/project/new_django/uwsgi.pid logto = /home/project/new_django/logs/uwsgi.log log-maxsize = 50000000 # 性能优化 enable-threads = true lazy-apps = true single-interpreter = true # 静态文件(可选,通常由 Nginx 处理) static-map = /static=/home/project/new_django/staticfiles
http://www.jsqmd.com/news/145724/

相关文章:

  • 如何用BJT实现开关电路:实战案例(新手友好)
  • PaddlePaddle镜像如何实现模型冷启动性能压测?基准测试方案
  • PaddlePaddle开源框架实测:工业级模型库如何提升开发效率?
  • ESP32开发项目应用:Arduino IDE构建Web服务器实战
  • PaddlePaddle模型压缩技术:轻量化部署降低Token与算力开销
  • BRAM与外部存储接口协同验证方法:实战案例
  • 小红书下载神器:3分钟快速上手免费开源工具
  • 新手教程:在ESP32上实现‘是/否’语音分类任务
  • PaddlePaddle自定义数据集训练全流程:GPU加速实操演示
  • 小红书下载神器XHS-Downloader:一键搞定无水印素材批量下载
  • PaddlePaddle人脸关键点检测:美颜APP核心技术揭秘
  • java中接口类的知识点介绍
  • ESP32教程之Wi-Fi UDP通信从零实现
  • PaddlePaddle镜像中的梯度裁剪(Clip Gradient)阈值设定建议
  • ESP32-CAM图传过程中内存溢出问题的根源与解决指南
  • 继电器模块电路图设计:Arduino兼容版完整指南
  • 解决USB-Serial Controller找不到驱动:基于CH340芯片的实战案例
  • ViGEmBus虚拟手柄驱动:游戏控制器兼容性终极解决方案
  • PaddleOCR性能优化秘籍:GPU加速让文本识别快如闪电
  • PaddleNLP大模型实战:中文情感分析如何节省Token消耗?
  • 小红书链接解析技术解析与应用实践
  • PaddlePaddle镜像能否运行BEiT做图像掩码重建?
  • PaddlePaddle镜像中的位置前馈网络(Position-wise FFN)优化
  • 小红书素材保存难题的智能解决方案:XHS-Downloader深度使用指南
  • Mermaid.js图表绘制终极指南:从入门到精通的完整可视化解决方案
  • E7Helper如何通过五大智能模块彻底改变第七史诗的游戏体验?
  • esp32开发环境搭建实战案例:基于Arduino IDE的手把手教学
  • PaddlePaddle镜像如何实现模型灰度切换?双版本并行运行
  • 终极音乐格式转换指南:3步解锁任何加密音频
  • TTL电路搭建半加器实验:操作指南完整版