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

Windows 部署项目 apache + mod_wsgi,nginx + waitress

文章目录

    • 1、apache + mod_wsgi,nginx + waitress两种部署方式的区别
    • 2、以nginx + waitress为例

有些项目必须部署在windows上,有IIS + wfastcgi、apache + mod_wsgi,nginx + waitress部署方式

1、apache + mod_wsgi,nginx + waitress两种部署方式的区别

  • 服务器性能
apache + mod_wsgi:Apache 是一款成熟的服务器软件,具有丰富的功能和模块。mod_wsgi模块将 Apache 与 Python 的 WSGI 应用(如 Django 项目)集成。不过,Apache 在处理大量并发请求时,资源消耗相对较高,性能可能会受到一定限制。
nginx + waitress:Nginx 以高性能、轻量级和处理高并发能力强著称。Waitress 是一个纯 Python 的 WSGI 服务器,性能较为出色。Nginx 可以作为反向代理服务器,将请求转发给 Waitress 处理,这种组合在处理高并发请求时表现更优,能够提供更好的性能和响应速度。
  • 配置复杂度
apache + mod_wsgi:Apache 的配置相对复杂,有大量的配置指令和模块需要理解和配置。配置mod_wsgi时,需要正确设置 WSGI 应用的相关参数,如 Python 路径、项目路径等,配置文件可能会比较冗长,对于初学者来说上手难度较大。
nginx + waitress:Nginx 的配置相对简洁明了,其配置文件结构清晰,主要包括服务器块、位置块等。Waitress 的配置相对简单,只需要指定端口、WSGI 应用等基本信息。整体来说,nginx + waitress的配置更容易理解和掌握,降低了部署的难度。
  • 稳定性
apache + mod_wsgi:Apache 经过了长期的发展和广泛的应用,具有较高的稳定性。mod_wsgi模块也比较成熟,在正确配置和维护的情况下,能够稳定地运行 Django 项目。不过,由于 Apache 的复杂性,某些配置不当或模块冲突可能会导致稳定性问题。
nginx + waitress:Nginx 以稳定性著称,在处理高并发和长时间运行时表现出色。Waitress 作为一个轻量级的 WSGI 服务器,也具有较好的稳定性。两者结合使用时,能够提供可靠的服务,并且在出现问题时,由于配置相对简单,更容易排查和解决问题。
  • 灵活性
apache + mod_wsgi:Apache 拥有丰富的模块和功能,可以通过各种模块实现诸如身份验证、访问控制、URL 重写等复杂功能。mod_wsgi也提供了一些配置选项来满足不同的部署需求。然而,由于其复杂性,在进行一些特殊配置或功能扩展时,可能需要深入了解 Apache 的内部机制。
nginx + waitress:Nginx 同样具有很强的灵活性,它可以方便地配置反向代理、负载均衡、SSL/TLS 加密等功能。Waitress 虽然功能相对较为单一,但作为 WSGI 服务器,能够很好地与 Django 项目集成。在nginx + waitress的组合中,可以通过 Nginx 的配置来灵活地调整服务器的行为,以适应不同的项目需求。
  • 资源占用
apache + mod_wsgi:Apache 在运行时会占用较多的系统资源,包括内存和 CPU。特别是在处理大量并发请求时,进程和线程的管理会消耗一定的资源。mod_wsgi模块也会占用一定的内存空间来加载 Python 解释器和 WSGI 应用。
nginx + waitress:Nginx 本身是一个轻量级的服务器,资源占用较少。Waitress 作为 Python 的 WSGI 服务器,相对来说资源消耗也比较低。在处理相同数量的并发请求时,nginx + waitress组合通常比apache + mod_wsgi占用更少的系统资源,能够在有限的硬件资源下提供更好的性能。

2、以nginx + waitress为例

  • nginx的下载、安装就不用多说了。nginx 配置 主要是修改nginx目录下的conf/nginx.conf
    下面的配置是比较齐全的,包括域名,ssl证书、静态文件及媒体文件
http {include       mime.types;default_type  application/octet-stream;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;http2 on; # HTTP 重定向(80端口)
server {listen 80;server_name www.ruicare.cn;return 301 https://$server_name$request_uri;  # 强制跳转 HTTPS
}# HTTPS 服务(443端口)
server {listen 443 ssl;server_name www.ruicare.cn;# SSL 证书配置(项目 A 证书)ssl_certificate     E:/Backup/nginx/certificates/ruicare.cn_bundle.crt;ssl_certificate_key E:/Backup/nginx/certificates/ruicare.cn.key;# SSL 安全配置(推荐通用配置)ssl_session_timeout 10m;ssl_protocols       TLSv1.2 TLSv1.3;ssl_ciphers         ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers on;# 静态文件与媒体文件(项目 A)location /static/ {root E:/demotm;   expires 30d;                  # 静态文件缓存 30天access_log off;               # 关闭静态文件访问日志}location /media/ {root E:/demotm;expires 30d;access_log off;}# 前端路由处理location / {root D:/nginx/html;     # 前端打包后的根目录index index.html;              # 默认首页try_files $uri $uri/ /index.html;  # 处理前端路由(如刷新404问题)# 排除 API 路径,交给后端代理(更推荐用独立的 location /api/ 块)if ($request_uri !~ ^/api/) {  # 非 API 请求,返回前端页面break;}}# 后端接口代理(项目 A 后端:8090端口)location /api/ {proxy_pass http://localhost:8080/api/;  # 注意末尾的斜杠,与后端接口前缀匹配proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;  # 传递 HTTPS 协议头# 超时与性能优化proxy_connect_timeout 10m;proxy_read_timeout 600s;proxy_buffer_size 128k;proxy_buffers 4 256k;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
  • 后端使用waitress
  下载  `pip install waitress`使用 在django项目的根目录创建run.py(文件名随意)
# run.py
from dltm.wsgi import application
from waitress import serveserve(application, host='0.0.0.0', port=8080, url_scheme='https')
# 也可配置多线程多进程

启动 直接项目目录下 python run.py 来启动

相关文章:

Windows 部署项目 apache + mod_wsgi,nginx + waitress

文章目录 1、apache mod_wsgi,nginx waitress两种部署方式的区别2、以nginx waitress为例 有些项目必须部署在windows上,有IIS wfastcgi、apache mod_wsgi,nginx waitress部署方式 1、apache mod_wsgi,nginx waitress两种…...

车辆视频检测器linux版对于密码中包含敏感字符的处理方法

由于密码中含有敏感字符,导致前端页面异常,图标变灰,坐标拾取打不开图像等,主要原因是:密码比较前后不一致,左边是Abc_110,右边是:Abc_110%2B,对于此问题,特别…...

Java服务端开发基石:深入理解Spring IoC与依赖注入 (DI)

今天,我们从现代Java开发,尤其是企业级应用中,几乎无处不在的Spring框架的核心概念开始:控制反转(Inversion of Control, IoC) 与 依赖注入(Dependency Injection, DI)。理解它们&am…...

【人工智能】大语言模型多义词解析技术揭秘——以“项目“歧义消解为例

今天田辛老师和小伙伴探讨了一个有趣的多义词问题, 在人工智能技术日新月异的今天,大语言模型(LLM)对自然语言的理解能力已经达到令人惊叹的水平。大模型到底是如何去区分多义词的? 比如:当用户提到"…...

贪心算法(17)(java)可被三整除的最大整数和

给你一个整数数组 nums,请你找出并返回能被三整除的元素 最大和。 示例 1: 输入:nums [3,6,5,1,8] 输出:18 解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。 …...

qq邮箱群发程序

1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击,进入UI编辑界面: 点击第三步后进入QT的UI设计界面,通过点击按钮进行界面设计,设计后进行保存到当前Pycharm…...

K8S学习之基础七十九:关闭istio功能

关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间,pod都会开启istio功能 反之,如果要开启istio,在对应命名空间打上该标签即可...

上门预约洗鞋店小程序都具备哪些功能?

现在大家对洗鞋子的清洗条件越来越高,在家里不想去,那就要拿去洗鞋店去洗。如果有的客户没时间去洗鞋店,这个时候,有个洗鞋店小程序就可以进行上门取件,帮助没时间的客户去取需要清洗的鞋子,这样岂不是既帮…...

在Ubuntu 22.04上配置【C/C++编译环境】

在Ubuntu 22.04上配置C/C编译环境 如果你想在Ubuntu 22.04上编译和运行C或C程序,首先需要安装一个合适的编译器和相关工具。本文将为你提供详细的安装建议和操作步骤,帮助你快速搭建开发环境。 准备工作 在开始之前,确保你的系统可以通过终…...

蓝桥杯——走迷宫(Java-BFS)

这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制:广度优先搜索按层遍历所有可能的路径,首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用:通过队列按先进先出的顺序处理节点,确保每一步探索的都是当…...

Spring MVC与Spring Boot文件上传配置差异对比及文件上传关键类详细说明与对比

一、Spring MVC与Spring Boot文件上传配置差异对比 1. 配置方式差异 框架配置方式依赖管理自动配置Spring MVC需手动配置MultipartResolver(如StandardServletMultipartResolver)需自行引入commons-fileupload等依赖无,默认不启用文件上传支…...

LLM 的model.generate() 参数说明

LLM 的model.generate() 参数说明 目录 LLM 的model.generate() 参数说明生成长度控制参数采样策略参数重复惩罚参数束搜索参数其他参数model.generate() 方法是 Hugging Face Transformers 库中用于文本生成的核心方法,它有众多参数可用于控制生成过程 生成长度控制参数 min…...

下载firefox.tar.xz后如何将其加入到Gnome启动器

起因:近期(2025-04-07)发现firefox公布了130.0 版本,可以对pdf文档进行签名了,想试一下,所以卸载了我的Debian12上的firefox-esr,直接下载了新版本的tar.xz 包。 经过一番摸索,实现了将其加入Gn…...

Flutter性能优化终极指南:从JIT到AOT的深度调优

一、Impeller渲染引擎调优策略 1.1 JIT预热智能预编译 // 配置Impeller预编译策略 void configureImpeller() {ImpellerEngine.precacheShaders(shaders: [lib/shaders/skinned_mesh.vert,lib/shaders/particle_system.frag],warmupFrames: 30, // 首屏渲染前预编译帧数cach…...

加密≠安全:文件夹密码遗忘背后的数据丢失风险与应对

在数字化时代,保护个人隐私和数据安全变得尤为重要。许多人选择对重要文件夹进行加密,以防止未经授权的访问。然而,一个常见且令人头疼的问题也随之而来——文件夹加密密码遗忘。当你突然发现自己无法访问那些加密的文件夹时,那种…...

实习技能记录【2】-----LVGL[基本概念]

LVGL主要概念 1. Screen (屏幕): 概念: 屏幕是 LVGL 应用程序中的顶层容器。它是用户界面的根对象,所有的可见 UI 元素最终都会添加到某个屏幕上(通常是活动屏幕)。 功能: 作为其他 UI 元素的父对象。 可以拥有自己的背景颜色、背景图片等样…...

【操作系统(Linux)】——通过案例学习父子进程的线程异步性

本篇旨在通过几个案例来学习父子进程的线程异步性 一、父进程与子进程 我们将要做的&#xff1a; 创建父子进程&#xff0c;观察父子进程执行的顺序&#xff0c;了解进程执行的异步行为 源代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include…...

Go 语言范围 (Range)

Go 语言范围 (Range) Go 语言是一种静态强类型、编译型、并发型编程语言&#xff0c;由 Google 开发。它的简洁性和高效性使其成为众多开发者的首选。在 Go 语言中&#xff0c;range 是一个非常有用的关键字&#xff0c;用于遍历数组、切片、字符串以及通道&#xff08;channe…...

【开源宝藏】30天学会CSS - DAY12 第十二课 从左向右填充的文字标题动画

用伪元素搞定文字填充动效&#xff1a;一行 JS 不写&#xff0c;效果炸裂 你是否曾经在设计页面标题时&#xff0c;觉得纯文字太寡淡&#xff1f;或者想做一个有动感的文字特效&#xff0c;但又不想引入 JS 甚至 SVG&#xff1f; 在这篇文章中&#xff0c;我们将通过 一段不到…...

nginx或tengine服务器,配置HTTPS下使用WebSocket的线上环境实践!

问题描述&#xff1a; HTTPS 下发起WS连接&#xff0c;连接失败&#xff0c;Chrom 浏览器报错。 socket.js:19 Mixed Content: The page at https://app.XXX.com was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint ws://172.16.10.80:903…...

WSA(Windows 安卓子系统)过检测教程

windows安卓子系统WSA的root和magisk的安装教程 安卓子系统WSLWSA的rootmagisk安装 WSA&#xff08;Windows 安卓子系统&#xff09;过检测的方法与思路 一、引言 Windows 安卓子系统&#xff08;WSA&#xff09;为 Windows 用户提供了在电脑上运行安卓应用的便利。然而&…...

蓝桥杯 B3620 x 进制转 10 进制

题目描述 给一个小整数 x 和一个 x 进制的数 S。将 S 转为 10 进制数。对于超过十进制的数码&#xff0c;用 A&#xff0c;B&#xff0c;… 表示。 输入格式 第一行一个整数 x; 第二行一个字符串 S。 输出格式 输出仅包含一个整数&#xff0c;表示答案。 输入输出样例 …...

【Oracle篇】跨字符集迁移:基于数据泵的ZHS16GBK转AL32UTF8全流程迁移

&#x1f4ab;《博主主页》&#xff1a;奈斯DB-CSDN博客 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(MongoDB)有了解 &#x1f496;如果觉得文章对你有所帮…...

Qt子模块的功能介绍

一、Qt 主要子模块的功能介绍 1. 核心模块 模块名称功能描述QtCore核心非GUI功能(信号槽、线程、文件IO、容器类、JSON/XML处理等)QtGui基础图形绘制(窗口系统集成、OpenGL抽象、图像处理、字体管理等)QtConcurrent高级多线程API(并行计算框架,如QtConcurrent::run)QtN…...

FRP练手:hello,world实现

方案一&#xff1a;使用 Flask&#xff08;推荐&#xff09; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "你好啊世界"if __name__ __main__:# 监听所有网络接口&#xff08;0.0.0.0&#xff09;&#xff0c;端口 3344app.…...

《深入探秘:分布式软总线自发现、自组网技术原理》

在当今数字化浪潮中&#xff0c;分布式系统的发展日新月异&#xff0c;而分布式软总线作为实现设备高效互联的关键技术&#xff0c;其自发现与自组网功能宛如打开智能世界大门的钥匙&#xff0c;为多设备协同工作奠定了坚实基础。 分布式软总线的重要地位 分布式软总线是构建…...

西门子S7-1200PLC 工艺指令PID_Temp进行控温

1.硬件需求&#xff1a; 西门子PLC&#xff1a;CPU 1215C DC/DC/DC PLC模块&#xff1a;SM 1231 TC模块 个人电脑&#xff1a;已安装TIA Portal V17软件 加热套&#xff1a;带加热电源线以及K型热电偶插头 固态继电器&#xff1a;恩爵 RT-SSK4A2032-08S-F 其他&#xff1…...

提升Windows安全的一些措施

由简单到复杂&#xff0c;仅供参考 一、杀毒软件&#xff1a; 1、杀毒能力&#xff1a; https://haokan.hao123.com/v?vid3883775443252827335&pdhaokan_share 2、使用注意&#xff1a; 一台主机只安装一个杀毒软件就可以了 杀毒软件会误报&#xff0c;造成正常文件…...

Jupyter notebook定制字体

一、生成配置文件 运行Anaconda Powershell Prompt终端&#xff0c;输入下面一行代码&#xff1a; jupyter notebook --generate-config 将生成文件“C:\Users\XXX\.jupyter\jupyter_notebook_config.py”&#xff0c;XXX为计算机账户名字。 二、修改配置文件 c.NotebookAp…...

内存分配中的堆(Memory Heap)详解

在计算机科学中&#xff0c;"堆"这个术语确实容易让人混淆&#xff0c;因为它同时用于描述两种完全不同的概念&#xff1a;数据结构中的堆和内存管理中的堆。上次我们讨论了数据结构中的堆&#xff0c;今天我将详细解释内存分配中的堆&#xff08;Memory Heap&#x…...