Ubuntu服务器Apache部署Django时的权限与Python模块问题
解决Ubuntu上Apache部署Django的权限与Python模块问题
从错误日志看,核心问题是Apache运行用户(www-data)没有权限访问虚拟环境目录,导致无法初始化Python解释器,进而找不到encodings模块,最终引发403错误。以下是具体解决步骤:
1. 修复用户主目录的访问权限
你的/home/robch目录权限为drwxr-x---,仅允许robch用户和组访问,www-data用户无法进入该目录。执行以下命令添加其他用户的执行权限:
sudo chmod o+x /home/robch
更安全的方式是将www-data加入robch用户组,再调整组权限:
sudo usermod -aG robch www-data sudo chmod g+x /home/robch
2. 确保虚拟环境及项目目录的权限正确
让www-data能读取并执行虚拟环境内的文件:
# 给虚拟环境目录递归设置读取和执行权限 sudo chmod -R g+rX /home/robch/TestSite/django_env # 确保WSGI脚本和项目目录有正确权限 sudo chmod o+x /home/robch/TestSite/Soundrise sudo chmod 644 /home/robch/TestSite/Soundrise/wsgi.py
3. 验证虚拟环境的Python完整性
encodings是Python核心模块,正常虚拟环境都会存在,执行命令确认:
ls -la /home/robch/TestSite/django_env/lib/python*/encodings
如果目录不存在,说明虚拟环境损坏,需重新创建:
# 删除现有虚拟环境 rm -rf /home/robch/TestSite/django_env # 重新创建并安装依赖 python3 -m venv /home/robch/TestSite/django_env source /home/robch/TestSite/django_env/bin/activate pip install django mod-wsgi pip install -r /home/robch/TestSite/requirements.txt
4. 调整Apache配置(可选但建议)
确保WSGIDaemonProcess路径正确,同时将DocumentRoot改为项目根目录避免冲突:
<VirtualHost *:80> ServerName 85.215.209.167 ServerAdmin webmaster@localhost DocumentRoot /home/robch/TestSite ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /static /home/robch/TestSite/static <Directory /home/robch/TestSite/static> Require all granted </Directory> Alias /media /home/robch/TestSite/files/media <Directory /home/robch/TestSite/files/media> Require all granted </Directory> <Directory /home/robch/TestSite/Soundrise> <Files wsgi.py> Require all granted </Files> </Directory> WSGIScriptAlias / /home/robch/TestSite/Soundrise/wsgi.py WSGIDaemonProcess django_app python-home=/home/robch/TestSite/django_env python-path=/home/robch/TestSite WSGIProcessGroup django_app </VirtualHost>
5. 重启Apache并验证
执行命令重启服务:
sudo systemctl restart apache2
访问服务器IP查看是否正常加载,若仍有问题,查看错误日志排查:
sudo tail -f /var/log/apache2/error.log
内容的提问来源于stack exchange,提问作者desboisrob
相关产品推荐
相关产品推荐

