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

在Ubuntu 12.04部署Django 2.0到Apache 2.2遇403权限问题求助

解决Django部署到Apache的403 Forbidden及虚拟环境配置问题

结合你的环境(Ubuntu 12.04、Apache 2.2.22、Python3.6.4、Django2.0),我梳理出两个核心问题的解决方案:403 Forbidden错误(服务器配置拒绝访问wsgi.py)和虚拟环境配置无法通过configtest,一步步来解决:

一、修复403 Forbidden错误(核心原因:访问控制规则错误)

你当前配置里对wsgi.py设置了Deny from all,这直接拒绝了所有对该文件的访问,导致403错误。Apache 2.2使用Order/Allow/Deny语法,需要修改为允许Apache访问wsgi.py:

修改httpd.conf中的Directory块:

<Directory /home/usr/project_name/project_name>
    <Files wsgi.py>
        Order deny,allow
        Allow from all  # 替换原来的Deny from all
    </Files>
</Directory>

同时注意你配置里的拼写错误:project_mame应该是project_name,修正WSGIScriptAlias的路径(末尾加斜杠避免URL解析问题):

WSGIScriptAlias /newsite/ /home/usr/project_name/project_name/wsgi.py/

二、正确配置虚拟环境(解决configtest失败问题)

Apache 2.2的mod_wsgi需要正确指向虚拟环境的Python解释器,首先要确保你安装的是支持Python3的mod_wsgi版本(Ubuntu 12.04默认的mod_wsgi通常针对Python2,需要调整)。

假设你的虚拟环境路径是/home/usr/venv/newsite(替换为你实际的虚拟环境路径),修改WSGIDaemonProcess配置:

WSGIDaemonProcess site python-path=/home/usr/project_name python-home=/home/usr/venv/newsite
WSGIProcessGroup site
  • python-path指向你的Django项目根目录(包含manage.py的那个目录)
  • python-home指向虚拟环境的根目录(包含bin、lib等文件夹的路径)

如果configtest报错,可能是这两个原因:

  1. 虚拟环境路径错误:确认路径存在,且Apache用户(通常是www-data)有读取权限
  2. mod_wsgi版本不兼容:卸载Python2版本的mod_wsgi,重新编译支持Python3的版本:
    sudo apt-get remove libapache2-mod-wsgi
    sudo apt-get install apache2-dev python3-dev
    pip3 install mod_wsgi
    # 将mod_wsgi的路径添加到Apache配置,示例路径请根据实际情况调整
    LoadModule wsgi_module /usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
    

三、Django项目的必要配置调整

为了让Django正确识别/newsite/子路径,修改settings.py:

  1. 设置子路径前缀:
    FORCE_SCRIPT_NAME = '/newsite'
    
  2. 更新允许访问的主机:
    ALLOWED_HOSTS = ['www.domainname.com', '127.0.0.1']
    
  3. 配置静态文件(如果需要):
    STATIC_URL = '/newsite/static/'
    STATIC_ROOT = '/home/usr/project_name/static_root'
    
    运行python manage.py collectstatic收集静态文件到STATIC_ROOT目录。

四、检查文件和目录权限

Apache运行用户www-data需要对以下路径有读取权限:

  • Django项目目录/home/usr/project_name
  • 虚拟环境目录/home/usr/venv/newsite
  • wsgi.py文件

执行以下命令设置权限:

sudo chown -R www-data:www-data /home/usr/project_name
sudo chmod -R 755 /home/usr/project_name

最后验证步骤

  1. 重启Apache:sudo service apache2 restart
  2. 运行配置测试:sudo apache2ctl configtest,确保无报错
  3. 访问127.0.0.1/newsite,应该能看到Django的默认页面(如果是新项目)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:32:10