我有一个django应用程序,带有gunicorn和nginx的python 2.7。
如果我尝试查看403 Forbidden Error
文件夹中的任何内容,Nginx会抛出static
:
/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static
nginx config (/etc/nginx/sites-enabled/myapp
)包含:
server {
listen 80;
server_name *.myapp.com;
access_log /home/ubuntu/virtualenv/myapp/error/access.log;
error_log /home/ubuntu/virtualenv/myapp/error/error.log warn;
connection_pool_size 2048;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
root /home/ubuntu/virtualenv/myapp/myapp/homelaunch/;
location /static/ {
alias /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
error.log包含:
2013/11/24 23:00:16 [error] 18243#0: *277 open() "/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png" failed (13: Permission denied), client: xx.xx.xxx.xxx, server: *.myapp.com, request: "GET /static/img/templated/home/img2.png HTTP/1.1", host: "myapp.com", referrer: "http://myapp.com/"
access.log包含
xx.xx.xx.xxx - - [24/Nov/2013:23:02:02 +0000] "GET /static/img/templated/base/animg.png HTTP/1.1" 403 141 "http://myapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0"
xx.xx.xx.xxx - - [24/Nov/2013:23:02:07 +0000] "-" 400 0 "-" "-"
我尝试在.css
中查看说出/static/
文件并在源代码中抛出这样的错误:
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
答案 0 :(得分:24)
用户nginx正在运行,因为( nginx ?)缺少读取本地文件/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png
的权限。您可能想检查文件权限以及层次结构中目录的权限。
答案 1 :(得分:20)
MacOs El Capitan :在nginx.conf
的顶部写user username group_name
我的用户名是Kamil所以我写道:
user Kamil staff;
(word&#39;员工&#39;在macOS中非常重要)。这样就可以了。之后,您不需要更改项目文件夹和文件中的任何权限。
答案 2 :(得分:8)
尝试在服务器部分上方的nginx.conf顶部指定用户。
user www-data;
答案 3 :(得分:5)
对我有用的最低限度是:
sudo chmod -R 664 /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/
sudo chmod -R a+X /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/
(顺便说一句,在我的情况下,静态文件夹名为collected_static
)
答案 4 :(得分:1)
Web服务器用户似乎对静态文件没有读取权限。 您可以通过两种方式解决此问题:
(最简单,更安全)以app app而非默认nginx
用户身份运行nginx。为此,请在 nginx.conf
user your_app_user
将your_app_user
替换为适合您应用的unix用户名。在这种情况下,your_app_user
已拥有静态内容的必要权限。
另一种方法是将Web服务器用户的权限授予静态目录。
答案 5 :(得分:0)
不久前我遇到了同样的问题。这可能是多种因素的组合。我找到了如何通过替换 403 access denied
文件中的用户来修复 nginx.conf
。
adduser newuser
usermod -aG sudo newuser
sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
nginx.conf
上的用户。默认情况下,nginx.conf
用户是 www-data
: user www-data;
worker_processes auto;
pid /run/nginx.pid;
然后我用我的 sudo 用户替换并解决了我的问题。 ?
user newuser;
worker_processes auto;
pid /run/nginx.pid;
sudo systemctl restart nginx
sudo systemctl restart gunicorn
sudo systemctl restart postgresql
还有 tada .. :) 没问题了。
答案 6 :(得分:-2)
经过这么多篇文章的几小时后,我遇到了: http://nicholasorr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/
对chmod整个django应用程序目录发表评论,所以我做了:
sudo chmod -R myapp
这解决了它。令人难以置信!
感谢那些提供解决方案的人。