我试图让我的django网站的用户通过模型上的FileField将文件(主要是PDF)上传到我的服务器。但是,我一直遇到“拒绝错误”#13; Errno 13 Permission Denied'尝试使用我的模型生成的上传字段时。
我在搜索时找到了许多潜在的解决方案,但到目前为止还没有能够正常工作。这是我第一次真正的部署,我可能会把自己搞糊涂了。作为参考,我在Ubuntu 14.04,Django 1.6和& gunicorn + nginx的。
现在,我的媒体根位于我的项目目录中:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(BASE_DIR, "media/uploads")
错误表明正确的目录存在问题,因此它会到达正确的位置。
我尝试chown -r
媒体目录www-data:www-data
但没有成功。我四处寻找,弄清楚用户是在运行python进程并尝试设置他'他'作为所有者 - 没有工作。我将其翻转回原始所有者和群组(root:root
)并尝试chmod -r
到755和770,这两个都无法解决问题。
如果我chmod -r
到777,那么所有内容和#34;都可以正常工作。 - 但是出于显而易见的原因,这不是我想要曝光的事情。
我的静态文件正在从我的项目根目录(/ var / www / mysite / static)之外的目录中收集和正确提供,所以我尝试在那里移动媒体文件夹并重复上述所有步骤 - 相同的结果。
如何让我的媒体文件夹安全地接受用户的上传和下载,而不会让这个安全漏洞全开?
谢谢!
答案 0 :(得分:3)
首先,媒体文件夹必须在你项目的路径中,否则你将从Django获得 SuspiciousOpertion 例外,所以不要把它放在 / var / www中强>
另外,你使用nginx的事实并不那么重要,重要的部分是哪个用户是nginx / django项目正在运行,无论用户是谁(通常 www-data ,at至少使用 apache + mod_wsgi ),该用户应该是媒体文件夹的所有者。
将所有者更改为正确的用户(我假设 www-data ):sudo chown -R www-data:www-data .../media
,请确保权限正确:sudo chmod -R u+rwX .../media
。
希望它有所帮助。如果没有,请告诉我。 :)
答案 1 :(得分:2)
尝试在nginx配置文件中增加max_body_size
:
server {
...
client_max_body_size 250M;
...
}
默认设置为 1M ,根据您上传的内容,这可能太小。