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 来启动

相关推荐
fangjianj4 小时前
windows环境反弹shell
linux·windows·web安全
有味道的男人4 小时前
得物详情 API|支持实时价格、成色、鉴别服务数据
windows·python·api
老王的笔记v5 小时前
46期 Windows超级管理器 垃圾清理 预装卸载与系统优化工具箱
windows·系统架构
张人玉7 小时前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
IT菜鸟程8 小时前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
Mr-Apple9 小时前
系统找不到指定的文件-CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
linux·windows·ubuntu·wsl
JSUITDLWXL9 小时前
jitsi-windows-local-translation
windows
sbjdhjd10 小时前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
点亮~黑夜12 小时前
远程连接浏览无桌面服务器上的图片
windows·软件构建
Albart57512 小时前
Docker Desktop 增量更新失败终极排查:Failed to apply delta update 反复回滚怎么办?
windows·docker·容器·docker部署大模型