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

文章目录

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

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

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

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

serve(application, host='0.0.0.0', port=8080, url_scheme='https')
# 也可配置多线程多进程

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

相关推荐
emplace_back1 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
一禅(OneZen)5 小时前
「Windows/Mac OS」AIGC图片生成视频 ,webui + stable-diffusion环境部署教程
windows·stable diffusion
AirDroid_cn6 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
小龙在山东8 小时前
Python 包管理工具 uv
windows·python·uv
昏睡红猹8 小时前
我在厂里搞wine的日子
windows·wine
love530love11 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
1024小神16 小时前
tauri项目在windows上的c盘没有权限写入文件
c语言·开发语言·windows
程序视点1 天前
Window 10文件拷贝总是卡很久?快来试试这款小工具,榨干硬盘速度!
windows
wuk9981 天前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
DuelCode1 天前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis