【发布时间】:2015-03-30 17:01:34
【问题描述】:
我正在使用 gunicorn 和 nginx 在 Digital Ocean 上运行 django。 Gunicorn 为 django 和 nginx 提供静态文件。
通过网站上传文件时,我无法保存到 /home 目录中的文件夹。我得到[Errno 13] Permission denied.
请问,如何让网络服务器能够对 /home 下的任意文件夹进行读写访问?
【问题讨论】:
标签: gunicorn
我正在使用 gunicorn 和 nginx 在 Digital Ocean 上运行 django。 Gunicorn 为 django 和 nginx 提供静态文件。
通过网站上传文件时,我无法保存到 /home 目录中的文件夹。我得到[Errno 13] Permission denied.
请问,如何让网络服务器能够对 /home 下的任意文件夹进行读写访问?
【问题讨论】:
标签: gunicorn
这一切都取决于运行您的应用程序的用户。
如果您检查ps aux | grep gunicorn Gunicorn 服务器正在运行您的应用程序的用户,那么您可以相应地更改chmod 或chown 权限。
ls -lash 将向您显示当前仅拥有该文件夹的用户以及您尝试写入的文件夹的权限:
4.0K drwxrwx--- 4 username username 4.0K Dec 9 14:11 uploads
然后您可以使用它来检查任何问题。
关于更改所有权和权限的一些文档
http://linux.die.net/man/1/chmod
http://linux.die.net/man/1/chown
我建议您非常小心您可以访问磁盘上的哪些位置以供 Web 服务器读取/写入。这可能会产生巨大的安全隐患。
【讨论】:
嗯,我在这个问题上工作了一个多星期,终于能够弄清楚。 请点击来自digital ocean 的链接,但他们没有指出重要的问题之一,其中包括
*1 connect() to unix:/tmp/myproject.sock failed (2: No such file or directory)
等
这些问题基本上是Nginx 和 Gunicorn 连接的权限问题。 为简单起见,我建议为您创建的每个文件/项目/python 程序授予相同的 nginx 权限。
要解决所有问题,请遵循以下方法: 首先是:
现在只需转到 /etc/nginx/nginx.conf 文件。 转到服务器模块并附加:
位置/{ 包括代理参数; proxy_pass http://unix:/home/nginx/myproject.sock; } 删除 不要从这里开始关注数字海洋文章
【讨论】:
更改 /home 的所有者
见实际所有者$ ls -l /
f1 f2 f3 f4 f5 f6 f6 f8 f9 f10
- rwx r-x r-x 1 root root 209 Mar 30 17:41 /home
https://www.garron.me/en/go2linux/ls-file-permissions.html
f2 文件或目录的所有者权限
f3 对文件或目录的组权限
f4 其他人对该文件或目录的权限
f6 拥有文件或目录的用户
递归更改文件夹所有者 sudo chown -R ubuntu /home/ 用非 root 用户替换 ubuntu。
良好做法
home/ubuntu 作为服务器目录,ubuntu 文件夹有ubuntu 用户作为所有者。sudo chmod -R 744 /home/ubuntu/
【讨论】:
在我的情况下,产生类似错误的事情非常简单,我只需要检查控制 Gunicorn 的用户和控制 NGINX 的用户,他们有不同的权限。
【讨论】: