Django 2.0.2在Apache mod_wsgi下内部服务器错误排查及解决
解决Django 2.0.2 + mod-wsgi-py3 + Apache部署的WSGI脚本加载失败问题
最近我在部署本地的Django 2.0.2应用时,碰到了烦人的内部服务器错误,核心提示就是无法将WSGI脚本加载为Python模块。我的运行环境是Python 3.6.3的virtualenv,搭配Daemon模式的mod-wsgi-py3 4.5.17和Apache 2.4.27。折腾了好一阵后,终于把所有问题都搞定了,现在把解决过程分享出来:
第一个问题:WSGI脚本无法加载为Python模块
这个问题的根源是mod-wsgi没有正确关联到我的virtualenv环境,导致找不到Django相关的模块。最终通过修改Apache配置里的WSGIDaemonProcess指令解决了——给它加上python-home和python-path两个参数:
# 示例配置,替换成你自己的路径 WSGIDaemonProcess my_django_app python-home=/home/your-user/venv python-path=/home/your-user/django-project-root WSGIProcessGroup my_django_app
python-home:指向你的virtualenv根目录,让mod-wsgi使用虚拟环境里的Python解释器python-path:指向你的Django项目根目录(就是包含manage.py的那个文件夹),确保mod-wsgi能找到项目的模块
第二个问题:静态资源访问异常
解决完第一个问题后,我又遇到了新的小问题——页面加载时静态资源全部404,这是因为我之前未在Apache配置中设置静态文件的别名映射,也没有给静态文件目录配置正确的访问权限。后来补充了以下配置:
# 映射静态文件URL到本地目录 Alias /static/ /home/your-user/django-project-root/static/ # 给静态文件目录设置访问权限 <Directory /home/your-user/django-project-root/static/> Require all granted </Directory>
同时我还检查了静态文件目录的权限,确保Apache的运行用户(比如www-data)有读取该目录的权限,用了类似这样的命令:
sudo chown -R www-data:www-data /home/your-user/django-project-root/static/ sudo chmod -R 755 /home/your-user/django-project-root/static/
现在我的Django服务已经能正常运行了,没有任何剩余错误。希望这些经验能帮到遇到同样问题的开发者!
内容的提问来源于stack exchange,提问作者user1547462
相关产品推荐
相关产品推荐

