我正在开发一个django API,它将在运行Ubuntu的服务器上通过WSGI在Apache2上运行.
用户可以使用POST请求将他们拍摄的照片上传到服务器.API处理此请求,然后尝试将图像写入/var/www/media/animals/user_uploads/<animal_type>/<picture_name>.jpg.如果没有目录/var/www/media/animals/user_uploads/<animal_type>/,它将创建它.
在开发过程中测试时,一切都很好,无论是使用Windows还是使用Scientific Linux.在部署服务器上进行测试时,我收到此错误:

据我所知,Apache2服务器正在使用该用户运行www-data.在我的情况下,运行cat /etc/passwd以获取用户列表,这是我得到的www-data:
WWW的数据:X:33:33:WWW的数据:/无功/网络:/ bin/sh的
我假设这意味着可以www-data访问所有内容/var/www/.我试过了:
chmod 777 -R媒体
这有效,但显然这是解决这个问题的一个非常糟糕的方法.有没有更好的方法来解决这个问题?
这是我的wsgi.py:
import os, sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "serengeti.settings")
sys.path.append('/serengeti/django/serengeti')
sys.path.append('/serengeti/django')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)
我在我的settings.py文件中有这个:
MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')
Run Code Online (Sandbox Code Playgroud)
我vhost.conf包含这个:
Alias /media/ /var/www/media/
Run Code Online (Sandbox Code Playgroud)