Nginx正在抛出一个403 Forbidden on Static Files

我有一个django应用程序,python 2.7与gunicorn和nginx

Nginx正在抛出一个403 Forbidden Error ,如果我试图在我的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 "-" "-" 

我试着在/static/查看一个.css文件,并在源代码中抛出这样的错误:

 <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> 

看起来用户nginx正在运行( nginx ?)缺少读取本地文件/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png 。 您可能想要检查文件权限以及层次结构中目录的权限。

2016:在nginx.conf的顶部写入user username group_name

我有macOs埃尔卡皮坦,我的用户名是卡米尔,所以我写道:

 user Kamil staff; 

(在MacOS中,“员工”一词非常重要)。 这是做的伎俩。 之后,您不需要更改项目文件夹和文件中的任何权限。

尝试在服务器部分上方的nginx.conf顶部指定一个用户。

 user www-data; 

为我工作的最小修复程序是:

 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

看来Web服务器用户没有对静态文件的读取权限。 你可以用两种方法解决这个问题:

  1. (最简单,更安全)运行nginx作为你的应用程序用户,而不是默认的nginx用户。 为此,请在下面添加

nginx.conf

 user your_app_user 

your_app_user替换为适合您的应用的unix用户名。

在这种情况下,your_app_user已经拥有对静态内容的必要权限。

  1. 另一种方法是将Web服务器用户的权限授予静态目录。

在这么多文章后几个小时,我碰到: http : //nicholaso​​rr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/

对chmod整个django应用程序目录有一个评论,所以我做了:

 sudo chmod -R myapp 

这固定它。 难以置信的!

感谢那些提供解决方案来解决这个问题。