web-dev-qa-db-ja.com

nginxは管理静的ファイルを提供していませんか?

説明次のエラーは admin static files 、つまり、Django adminに対応する静的ファイルに固有です。残りの静的ファイルは完全に機能しています。

問題

基本的に、ngixサーバーを使用して admin static files にアクセスできません。

それはDjangoのマイクロサーバーで動作し、collectstaticはその役割を果たしています。つまり、静的フォルダーの予想される場所にファイルを配置しています。

URLは正しいですが、 admin static files には直接アクセスできませんが、その他にはアクセスできます。したがって、たとえば:

  1. このURLにアクセスできます(ブラウザーでコピーします):myserver.com:8080/static/css/base/base.css

  2. しかし、他のURL(ブラウザでコピー)にアクセスできません:myserver.com:8080/static/admin/css/admin.css


何を試しましたか?

does work もしadmin/ディレクトリ構造を__other_admin_directory_name/__にコピーし、次にmyserver.com:8080/static/__other_admin_directory_name__/css/admin.cssにアクセスすると

また、

  1. 権限を確認したところ、すべて問題ありませんでした。
  2. ADMIN_MEDIA_PREFIX = '/ static/admin /'をADMIN_MEDIA_PREFIX = '/ static/ other_admin_directory_name /'に変更しようとしましたが、機能しません。

最後に、それは重要な手掛かりのようです:

admin/ディレクトリ構造を__admin_and_then_any_suffix/__にコピーしようとしました。その後、myserver.com:8080/static/__admin_and_then_any_suffix/__/css/admin.cssにアクセスできません。したがって、ディレクトリの名前がadminで始まる場合(たとえば、administrationまたはadmin2)、それは機能しません


EDIT-@sarnoldの観測のおかげで追加:

問題はnginx設定ファイル/ etc/nginx/sites-available/mysiteにあるようです

location /static/admin {
   alias /home/vl3/.virtualenvs/vl3/lib/python2.7/site-packages/Django/contrib/admin/media/;
}
6
toto_tico

私の提案:

  1. Django 1.3+(および ADMIN_MEDIA_PREFIXは現在非推奨) )を使用します

  2. 両方を設定 STATIC_URLおよびSTATIC_ROOT your settings.py

  3. Nginx confに単一の静的エントリのみを定義します(末尾にスラッシュを付けます)。 不要アドレス指定する2番目のstatic/admin/

    location /static/  {
            alias /path/to/static/;
    }
    
  4. collectstaticを使用すると、admin-> static/adminが収集されます。収集された他のすべての静的メディアと同じ場所に存在します。

    python manage.py collectstatic

18
jdi

私は同じ問題を抱えています。 Centos 7.6上のnginxサーバーがパス/home/user/app/mysyte/static/の静的フォルダーにアクセスできません。 /var/log/nginx/error.logで同じエラー

open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)

この問題を解決して理解するために:=*

  1. コマンドを実行getenforce
  2. 強制する場合-cat /var/log/audit/audit.log | grep nginx

私にとって、エラーのある文字列は次のようになります

type=AVC msg=audit(1558033633.723:201): avc:  denied  { read } for  pid=7758 comm="nginx" name="responsive.css" dev="dm-0" ino=17312394 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1558033633.723:201): Arch=c000003e syscall=2 success=no exit=-13 a0=564f710dd55d a1=800 a2=0 a3=68632f656d6f682f items=0 ppid=7757 pid=7758 auid=4294967295 uid=998 gid=996 euid=998 suid=998 fsuid=998 egid=996 sgid=996 fsgid=996 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)

監査メッセージのIDをコピー1558033633.723:201

  1. コマンドgrep yours_audit_id /var/log/audit/audit.log | audit2whyを実行します

私のための出力

[root@uwsgi ~]# grep 1558034479.384:221 /var/log/audit/audit.log | audit2why
type=AVC msg=audit(1558034479.384:221): avc:  denied  { read } for  pid=7758 comm="nginx" name="responsive.css" dev="dm-0" ino=17312394 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

        Was caused by:
        The boolean httpd_read_user_content was set incorrectly.
        Description:
        Allow httpd to read user content

        Allow access by executing:
        # setsebool -P httpd_read_user_content 1

ここで答えを見ることができるようにsetsebool -P httpd_read_user_content 1このコマンドを実行すると、静的コンテンツが表示されます

1
N. Turshiev