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

部署Django网站遇权限拒绝错误,求解决方案

解决Django部署到Apache时的权限与虚拟环境初始化错误

从错误日志和目录权限信息来看,核心问题是Apache运行用户(www-data)没有权限访问你的用户主目录/home/m_user,导致mod_wsgi无法读取虚拟环境文件,进而触发Python编码模块加载失败的错误。以下是具体解决步骤:

1. 调整用户主目录的访问权限

你的/home/m_user目录权限为drwxr-x---,仅允许m_user用户及同组用户访问,www-data用户无法遍历进入该目录。执行以下命令开放目录的执行权限给其他用户:

chmod o+x /home/m_user

执行后目录权限会变为drwxr-x--x,允许www-data用户进入后续的django_site和venv路径。

2. 修复虚拟环境目录的权限

确保虚拟环境及其子文件对www-data有读取权限:

sudo chmod -R 755 /home/m_user/django_site/venv
sudo chown -R m_user:www-data /home/m_user/django_site/venv

这会递归设置虚拟环境的权限,让www-data能够读取其中的Python模块文件。

3. 修正mod_wsgi模块的加载配置

你当前将LoadModule指令放在了<VirtualHost>块内部,这是错误的;同时路径中的pythonX.X和pyXY是占位符,需要替换为实际的Python版本:

  • 先查找虚拟环境中mod_wsgi的实际路径:
find /home/m_user/django_site/venv -name "mod_wsgi-py*.so"

示例输出:/home/m_user/django_site/venv/lib/python3.10/site-packages/mod_wsgi/server/mod_wsgi-py310.so

  • 将LoadModule指令移至Apache全局配置文件(如/etc/apache2/apache2.conf)或mods-available目录下的配置文件中,而非VirtualHost内部:
LoadModule wsgi_module "/home/m_user/django_site/venv/lib/python3.10/site-packages/mod_wsgi/server/mod_wsgi-py310.so"
  • 删除VirtualHost块中的LoadModule行,然后重启Apache:
sudo systemctl restart apache2

4. 验证WSGI守护进程配置

确认WSGIDaemonProcess中的路径无误:

WSGIDaemonProcess django_app python-path=/home/m_user/django_site python-home=/home/m_user/django_site/venv

确保python-home指向的虚拟环境目录真实存在,且路径拼写正确。

5. 检查SELinux(若服务器启用)

如果服务器开启了SELinux,可能会阻止Apache访问用户主目录下的文件:

  • 临时关闭SELinux测试:
sudo setenforce 0
  • 若问题解决,添加SELinux规则允许Apache访问该目录:
sudo semanage fcontext -a -t httpd_sys_content_t "/home/m_user/django_site(/.*)?"
sudo restorecon -Rv /home/m_user/django_site

内容的提问来源于stack exchange,提问作者mdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:12:46