apache托管django应用的核心是mod_wsgi模块,需严格匹配python版本、apache版本、系统架构及编译器;配置须同步设置loadfile/loadmodule、wsgidaemonprocess、wsgiscriptalias、静态文件alias及环境变量。

Apache 要托管 Django 应用,核心是通过 mod_wsgi 模块把 Python 应用接入 HTTP 服务。配置不是“改几行就完事”,而是需确保 Python 环境、Apache 模块、WSGI 入口、权限路径 四者严格匹配。下面分关键环节讲清楚怎么做。
确保 mod_wsgi 与环境完全兼容
mod_wsgi 不是通用插件,它必须和你的 Apache 版本(如 httpd-2.4)、Python 版本(如 3.9)、系统架构(32/64 位)、编译器(VC14/VC15/VC17)一一对应。
- Windows 下推荐从 Gohlke 的非官方 wheel 库 下载
.whl文件,例如:mod_wsgi‑4.9.4+ap24vc17‑cp39‑cp39‑win_amd64.whl - 安装命令:
pip install mod_wsgi‑4.9.4+ap24vc17‑cp39‑cp39‑win_amd64.whl
- 安装后运行
mod_wsgi-express module-config,复制输出的LoadModule和LoadFile行——这是唯一可靠的方式,避免手动写错路径或依赖 DLL。
在 httpd.conf 中启用并指向 WSGI 入口
把 mod_wsgi-express module-config 输出内容粘贴到 httpd.conf 末尾(注意路径中反斜杠要转义或改用正斜杠):
LoadFile "C:/Python39/python39.dll" LoadModule wsgi_module "C:/Python39/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd"
再添加站点配置(以项目路径 D:/myproject 为例):
WSGIDaemonProcess myproject python-home=D:/venv python-path=D:/myproject
WSGIProcessGroup myproject
WSGIScriptAlias / D:/myproject/myproject/wsgi.py
<directory d:><files wsgi.py>
Require all granted
</files></directory>
-
python-home指向虚拟环境根目录(含Scripts/和Lib/),不是 Python 安装目录; -
python-path是项目根目录(即manage.py所在层),让import myproject成立; -
WSGIScriptAlias /表示整个站点走 Django,若只想挂/api/,写成WSGIScriptAlias /api/ ...即可。
验证并修复常见运行时问题
Django 启动失败往往不是配置语法错,而是环境变量或编码缺失:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 在 Apache 的
envvars文件(Linux/macOS)或httpd.conf开头加:SetEnv DJANGO_SETTINGS_MODULE myproject.settings SetEnv PYTHONIOENCODING utf-8
- Windows 下还需在
httpd.conf里显式设置 locale(尤其上传中文文件名时报UnicodeEncodeError):SetEnv LANG en_US.UTF-8 SetEnv LC_ALL en_US.UTF-8
- 确保
wsgi.py中os.environ.setdefault("DJANGO_SETTINGS_MODULE", ...)的模块路径与实际项目结构一致(比如myproject.settings,不是mysite.settings)。
静态文件和媒体文件不能靠 Django 服务
Apache 必须直接托管 /static/ 和 /media/,否则性能极差且 DEBUG=False 时白屏:
Alias /static D:/myproject/static
<directory d:>
Require all granted
</directory>
Alias /media D:/myproject/media
<directory d:>
Require all granted
</directory>
并在 Django 的 settings.py 中明确:
STATIC_ROOT = 'D:/myproject/static' MEDIA_ROOT = 'D:/myproject/media'
部署前务必运行 python manage.py collectstatic --noinput。
不复杂但容易忽略
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










