Django 找不到使用 uWSGI 的管理页面的 CSS 文件

Django 找不到使用 uWSGI 的管理页面的 CSS 文件

即使我遵循官方说明,当我使用 uWSGI 启动 Django 测试站点时,管理界面的 CSS 文件未加载。如果我打开 CSS 文件的 URL,例如http://localhost:8443/static/admin/css/base.css,我会收到 404 错误。我搜索了本地文件,我猜它的路径是/usr/local/lib/python3.3/dist-packages/django/contrib/admin/static/admin/css/base.css;所以我也尝试以 root 身份运行 uwsgi,但什么都没有改变。

我使用 没有任何问题python3 manage.py runserver。如果我打开http://localhost:8000/static/admin/css/base.css,文件就会在浏览器中加载,并且样式会应用于管理页面。

这是我在 bash 中执行的命令:

uwsgi --ini ~/.uwsgi/conf/django.ini --set-placeholder project_name=mysite --set-placeholder port=8443

这是 django.ini 的内容:

[uwsgi]
module = %(project_name).wsgi:application
https = :%(port),/usr/local/nginx/conf/server.crt,/usr/local/nginx/conf/server.key,HIGH
strict = true
chdir = /home/marco/django-projects/%(project_name)
env = DJANGO_SETTINGS_MODULE=%(project_name).settings
socket = /home/marco/.uwsgi/%(project_name).socket
pidfile = /home/marco/.uwsgi/%(project_name).pid
daemonize = /home/marco/.uwsgi/%(project_name).log
master = true
enable-threads = true
harakiri = 20
max-requests = 5000
vacuum = true

答案1

官方部署文档(由 WSGI 服务器独立提供)不涵盖提供静态文件(通常由 Web 服务器管理)。正确的文档在这里:

https://docs.djangoproject.com/en/dev/howto/static-files/deployment/

最终使用 uWSGI 提供静态文件非常容易:

http://uwsgi-docs.readthedocs.org/en/latest/StaticFiles.html

但如果你能在 nginx 中做到这一点就更好了

答案2

我有同样的问题。我的 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)

审计消息的副本 ID1558033633.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当您运行此命令时,您可以在此处看到答案,您会看到静态内容

相关内容