我正在使用 gunicorn 和 nginx 在Digital Ocean上运行django。 Gunicorn为django和nginx提供静态文件。
通过网站上传文件后,我无法保存到/ home目录中的文件夹。我得到[Errno 13] Permission denied.
请问,如何使网络服务器能够读取/ home下任意文件夹的写入权限?
答案 0 :(得分:7)
这一切都取决于您的应用程序正在运行的用户。
如果您检查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服务器进行读/写操作。这可能会产生巨大的安全隐患。
答案 1 :(得分:1)
好吧,我在这个问题上工作了一个多星期,最后能够计算出来。 请关注digital ocean中的链接,但他们没有查明包含
的重要问题* 1 connect()到unix:/tmp/myproject.sock失败(2:没有这样的文件或目录)
<强>等强>
对于Nginx和Gunicorn之间的连接,这些问题基本上是权限问题。 为简单起见,我建议 为您创建的每个文件/项目/ python程序提供相同的nginx权限 。
要解决所有问题,请遵循以下方法: 首先是:
现在转到/etc/nginx/nginx.conf文件。 转到服务器模块并附加:
location / { 包括proxy_params; proxy_pass http&lt;&gt;:&lt;&gt; // unix:/home/nginx/myproject.sock; } 删除&lt;&gt; 请勿在此处关注digitalocean aricle
答案 2 :(得分:0)
更改/ 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/
答案 3 :(得分:0)
就我而言,这是非常简单的事情,它产生了类似的错误,我只需要检查控制Gunicorn的用户和控制NGINX的用户,他们是否具有不同的权限。