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>
ユーザーnginxが実行されているようです(nginx?)は、ローカルファイル/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png
。おそらく、ファイルのアクセス許可だけでなく、階層内のディレクトリのアクセス許可も確認したいでしょう。
MacOs El Capitan:nginx.conf
の先頭にuser username group_name
と書き込みます
私のユーザー名はカミルなので、次のように書きます。
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サーバーのユーザーには、静的ファイルの読み取り権限がないようです。これは2つの方法で解決できます。
(最も簡単で安全)デフォルトのnginx
ユーザーの代わりにアプリユーザーとしてnginxを実行します。これを行うには、次をnginx.confに追加します
user your_app_user
置換your_app_user
アプリに適切なUNIXユーザー名を使用します。この場合、your_app_user
はすでに静的コンテンツに必要な許可を持っています。
別の方法は、Webサーバーユーザーに静的ディレクトリへのアクセス許可を付与することです。