Django + apache2 错误: [errno 13] 权限被拒绝: '/photos'



我有一个ubuntu服务器托管我的应用程序,它包括一个由angular制成的前端和一个由django制成的API。

当我尝试通过API上传图像时,我会得到错误:[Erno 13]权限被拒绝:'/photos'

我尝试将权限设置为644/755,完全读取&对目录写入权限,我还尝试创建组并将www数据控制权交给目录。。。但到目前为止一切都不起作用。

我正在使用带有mod_wsgi的Apache2来服务我的django应用程序。以下是文件夹结构:

/var/www/html/api
│   manage.py
│   passenger.wsgi
│   requirements.txt 
│
│───photos (this is the related directory)
│
└───apiX
│   │   serializers.py
│   │   views.py
│   │   ........
│   │
└───apiMain
│   asgi.py
│   settings.py
│   wsgi.py

以下是我的/etc/apache2/apache2.conf设置:

# Django app config!
WSGIScriptAlias /api /var/www/html/api/apiMain/wsgi.py
WSGIPythonHome /var/www/html/api/venv
WSGIPythonPath /var/www/html/api/venv/lib64/python3.8/site-packages
WSGIDaemonProcess x_api python-home=/var/www/html/api/venv python-path=/var/www/html/api
WSGIProcessGroup x_api
<Directory /var/www/html/api>
<Files apiMain/wsgi.py>
Require all granted
</Files>
</Directory>
Alias /photos/ /var/www/html/api/photos
Alias /photos /var/www/html/api/photos
<Directory /var/www/html/api/photos>
Require all granted
</Directory>

谢谢!

Apache服务需要读取目标目录/文件的整个路径的权限,因此您需要向Apache用户提供这样的权限。

为了模拟用户写入,您可以对用户进行个性化和模拟(我假设apache服务名为www-data(:

sudo -u www-data ls -al /var/www/html/api/photos

如果你得到Permission denied,那么你需要逐个文件夹检查:

sudo -u www-data ls -al /var/
sudo -u www-data ls -al /var/www/
sudo -u www-data ls -al /var/www/html/
sudo -u www-data ls -al /var/www/html/api/
sudo -u www-data ls -al /var/www/html/api/photos

无论哪个文件夹缺少读取权限,请设置正确的权限,例如:

chmod o+r /var/www/html ...
(or chgrp www-data /var/www... + chmod g+r ...)

但安全性存在问题——允许所有用户都拥有这样的用户权限安全吗?有时,将文件夹放在系统中较低的深度是更好的解决方案,例如将照片和设置权限放在:中

/srv/photos

相关内容

  • 没有找到相关文章