web-dev-qa-db-ja.com

Nginxは静的ファイルで403 Forbiddenをスローしています

Django app、python 2.7でgunicornとnginxを使用しています。

staticフォルダー内の何かを表示しようとすると、Nginxは403 Forbidden Errorをスローします@:

/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>
17
CodeTalk

ユーザーnginxが実行されているようです(nginx?)は、ローカルファイル/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png。おそらく、ファイルのアクセス許可だけでなく、階層内のディレクトリのアクセス許可も確認したいでしょう。

24
bryn

MacOs El Capitannginx.confの先頭にuser username group_nameと書き込みます

私のユーザー名はカミルなので、次のように書きます。

user Kamil staff;

(macOSでは「スタッフ」という言葉は非常に重要です)。これはトリックを行います。その後、プロジェクトフォルダーとファイルのアクセス許可を変更する必要はありません。

21

サーバーセクションの上にあるnginx.confの上部でユーザーを指定してみてください。

user www-data;
8
eezis

私のために働いた最小の修正は:

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

5
o_c

Webサーバーのユーザーには、静的ファイルの読み取り権限がないようです。これは2つの方法で解決できます。

  1. (最も簡単で安全)デフォルトのnginxユーザーの代わりにアプリユーザーとしてnginxを実行します。これを行うには、次をnginx.confに追加します

    user your_app_user
    

    置換your_app_userアプリに適切なUNIXユーザー名を使用します。この場合、your_app_userはすでに静的コンテンツに必要な許可を持っています。

  2. 別の方法は、Webサーバーユーザーに静的ディレクトリへのアクセス許可を付与することです。

2
user4212639