在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报错,可能是这两个原因:
- 虚拟环境路径错误:确认路径存在,且Apache用户(通常是
www-data)有读取权限 - 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:
- 设置子路径前缀:
FORCE_SCRIPT_NAME = '/newsite' - 更新允许访问的主机:
ALLOWED_HOSTS = ['www.domainname.com', '127.0.0.1'] - 配置静态文件(如果需要):
运行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
最后验证步骤
- 重启Apache:
sudo service apache2 restart - 运行配置测试:
sudo apache2ctl configtest,确保无报错 - 访问
127.0.0.1/newsite,应该能看到Django的默认页面(如果是新项目)
内容的提问来源于stack exchange,提问作者LJC
相关产品推荐
相关产品推荐

