关于类似问题有很多问题,但没有特别提到错误 500 与 Django 的结合。例如类似的问题:
Apache 错误日志:
[Wed Jun 19 18:41:44.364270 2019] [access_compat:error] [pid 9386:tid 140669708334848] [client 1.2.3.4:1948] AH01797: client denied by server configuration: /home/user/website/wsgi.py, referer: https://website.org/admin/login/?next=/admin/
错误显示如下:
Error 500: Internal Server Error
但这仅在尝试访问管理面板时出现,浏览页面或下载受 Apache 保护的目录后面的文件时不会出现。我能找到的所有问答都谈到了 Apache 设置中的错误,但似乎不存在(自安装以来 Apache 没有任何变化)。
答案1
错误消息具有误导性。错误的实际原因是服务器数据库由 提供服务sqlite
,并且文件在更新期间获得了错误的所有权。它现在归root
Django Apache 用户 ( www-data
) 所有,并且不可由其写入:
username@servername:~/project$ ls -lsa
total 924
4 drwxr-xrwx 7 www-data www-data 4096 Mar 22 02:48 .
4 drwxr-xrwx 4 www-data www-data 4096 Dec 24 2017 ..
880 -rwxr-xr-x 1 root root 1046528 Mar 22 02:48 db.sqlite3
4 drwxr-xrwx 5 www-data www-data 4096 Mar 2 12:56 files
4 drwxr-xrwx 7 www-data www-data 4096 Mar 26 22:13 front
4 drwxr-xrwx 8 www-data www-data 4096 Jun 11 15:24 .git
4 -rwxrwxr-x 1 username username 1218 Nov 8 2018 .gitignore
4 -rwxrwxrwx 1 www-data www-data 800 Apr 3 2017 manage.py
4 drwxr-xrwx 3 www-data www-data 4096 Mar 26 15:42 project
4 -rwxrwxrwx 1 www-data www-data 56 Jun 2 2017 README.md
4 -rw-rw-r-- 1 username username 49 Nov 8 2018 requirements.txt
4 drwxrwxrwx 4 www-data www-data 4096 Jan 11 2017 static
Django 管理面板在用户登录管理面板时更新数据库(用于记录保存),如果无法执行此操作则会导致 500 错误。
要解决此问题,只需将所有权改回正常:
sudo chown www-data: db.sqlite3