CentOS 7下Apache部署Django项目遇mod_wsgi模块加载错误求助
先把你遇到的错误日志完整呈现出来(你提供的内容有截断,核心问题是WSGI脚本无法作为Python模块加载):
[Mon Apr 23 07:01:02.930780 2018] [:error] mod_wsgi (pid=26121): Target WSGI script '/he/django/myshop/myshop/wsgi.py' cannot be loaded as Python module.
[Mon Apr 23 07:01:02.930821 2018] [:error] mod_wsgi (pid=26121): Exception occurred processing WSGI script '/he/django/myshop/myshop/wsgi.py'.
[Mon Apr 23 07:01:02.930842 2018] [:error] Traceback (most r...
这个问题在CentOS 7部署Django+Apache时特别常见,我给你梳理几个排查和解决的关键点:
1. 确认mod_wsgi与Python版本匹配
CentOS 7默认的mod_wsgi一般绑定系统自带的Python 2.7,但如果你的Django项目是用Python 3开发的,版本不匹配直接就会导致模块加载失败:
- 先确认项目使用的Python版本:
python --version(或python3 --version) - 安装对应版本的mod_wsgi:如果是Python3,执行
yum install mod_wsgi-python3,然后重启Apache:systemctl restart httpd - 验证安装结果:执行
httpd -M | grep wsgi,确保输出是wsgi_python3_module而非wsgi_module
2. 修复项目目录权限
Apache的运行用户(通常是apache或httpd)需要有访问Django项目目录的权限,否则会因为权限不足无法加载脚本:
- 给项目目录设置正确权限:
chown -R apache:apache /he/django/myshop chmod -R 755 /he/django/myshop - 如果用了虚拟环境,虚拟环境的目录也要给apache用户开放读取权限
3. 检查Apache配置文件的路径设置
在你的Apache站点配置文件(比如/etc/httpd/conf.d/myshop.conf)里,要确保以下配置正确:
- 指定Python路径(尤其是用了虚拟环境的情况)
WSGIScriptAlias指向正确的wsgi.py文件- 示例配置参考:
记得把WSGIDaemonProcess myshop python-path=/he/django/myshop:/path/to/your/venv/lib/python3.6/site-packages WSGIProcessGroup myshop WSGIScriptAlias / /he/django/myshop/myshop/wsgi.py process-group=myshop <Directory /he/django/myshop/myshop> <Files wsgi.py> Require all granted </Files> </Directory>/path/to/your/venv替换成你实际的虚拟环境路径,没用虚拟环境就去掉后面那部分。
4. 确认Django依赖安装完整
如果wsgi.py里导入Django模块失败,大概率是依赖没装全:
- 进入项目环境(虚拟环境先激活),执行
pip install -r requirements.txt - 验证Django是否安装:
pip show django
5. 查看完整的错误Traceback
你提供的日志被截断了,建议去/var/log/httpd/error_log查看完整的错误栈,比如是否是ImportError,这样能精准定位到底是哪个模块找不到,还是路径配置出了问题。
按照上面的步骤逐一排查,基本就能解决这个模块加载失败的问题。
内容的提问来源于stack exchange,提问作者Sergei Petrov

