Windows11下Apache24+mod_wsgi部署Django无响应问题求助
Django+Apache(mod_wsgi)无响应排查方案
1. 验证mod_wsgi与Python版本匹配性
- 确认编译mod_wsgi时使用的是Python 3.11的同版本同位数(32/64位),Windows下版本不匹配会导致静默无响应,甚至无报错输出。
- 执行
mod_wsgi-express module-config,将输出的LoadModule行替换httpd.conf里的对应配置,确保模块加载路径和参数完全正确。
2. 规范虚拟环境激活配置
- 在项目的
wsgi.py中明确指定虚拟环境的site-packages路径,不要依赖系统PYTHONPATH:import site site.addsitedir('C:/你的项目路径/venv/Lib/site-packages') - 确保
wsgi.py里的os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")路径正确,生产环境需将settings中的DEBUG设为False,同时添加允许的主机ALLOWED_HOSTS = ['*', '你的域名/服务器IP']。
3. 排查Apache权限问题
- 给Apache的运行用户(默认是LocalSystem)分配mysite项目目录、venv目录的读取+执行权限,重点覆盖静态文件目录和媒体文件目录。
- 尝试用管理员身份启动
httpd.exe,避免因权限不足导致文件读取阻塞。
4. 启用mod_wsgi详细日志
- 在httpd.conf中添加mod_wsgi专属日志配置,强制输出调试信息:
启动Apache后查看WSGILogLevel info WSGILog "C:/Apache24/logs/wsgi.log"wsgi.log,这里往往会捕获到error.log未记录的加载细节。
5. 测试最简WSGI应用
- 编写极简的
test_wsgi.py,替换Django的wsgi配置,验证mod_wsgi本身是否正常工作:
在httpd.conf中指向该文件:def application(environ, start_response): status = '200 OK' output = b'Hello World from mod_wsgi' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]
如果该测试页能正常访问,说明问题出在Django项目配置而非mod_wsgi本身。WSGIScriptAlias / "C:/测试文件路径/test_wsgi.py" <Directory "C:/测试文件路径/"> Require all granted </Directory>
6. 检查静态文件配置冲突
- 生产环境下需配置
STATIC_ROOT并执行python manage.py collectstatic,然后在httpd.conf中正确映射静态文件路径,避免因静态文件请求阻塞整个服务:Alias /static/ "C:/你的项目路径/mysite/static/" <Directory "C:/你的项目路径/mysite/static/"> Require all granted </Directory> - 确保静态文件目录无中文或特殊字符,且权限配置正确。
内容的提问来源于stack exchange,提问作者Chandler Klüser
相关产品推荐
相关产品推荐

