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
官方部署文件(由 WSGI 伺服器獨立)不包括提供靜態文件(通常由 web 伺服器管理)。正確的文件在這裡:
https://docs.djangoproject.com/en/dev/howto/static-files/deployment/
最終使用 uWSGI 提供靜態文件非常容易:
http://uwsgi-docs.readthedocs.org/en/latest/StaticFiles.html
但如果你可以在 nginx 中做到這一點,那就更好了
我也有同樣的問題。我在 Centos 7.6 上的 nginx 伺服器無法訪問 path 中的靜態文件夾
/home/user/app/mysyte/static/
。在/var/log/nginx/error.log
同樣的錯誤open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)
為了解決和理解這個問題
:=*
- 執行命令
getenforce
- 如果執行 -
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
- 執行命令
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
當您執行此命令時,您可以在此處看到答案,您會看到您的靜態內容