You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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专属日志配置,强制输出调试信息:
    WSGILogLevel info
    WSGILog "C:/Apache24/logs/wsgi.log"
    
    启动Apache后查看wsgi.log,这里往往会捕获到error.log未记录的加载细节。

5. 测试最简WSGI应用

  • 编写极简的test_wsgi.py,替换Django的wsgi配置,验证mod_wsgi本身是否正常工作:
    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]
    
    在httpd.conf中指向该文件:
    WSGIScriptAlias / "C:/测试文件路径/test_wsgi.py"
    <Directory "C:/测试文件路径/">
        Require all granted
    </Directory>
    
    如果该测试页能正常访问,说明问题出在Django项目配置而非mod_wsgi本身。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:20:18