AWS上的Django应用登录时出现500服务器错误,求排查方法
一、查看详细错误日志
1. 配置Django内置日志
在settings.py中添加日志配置,将错误信息写入文件,方便排查:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'ERROR', 'class': 'logging.FileHandler', 'filename': '/path/to/your/django/error.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'ERROR', 'propagate': True, }, }, }
修改filename为项目可写入的路径,保存后重启服务,再次触发登录操作,查看日志文件即可获取详细错误栈。
2. 查看Nginx日志
直接查看Nginx的错误日志和访问日志,通常路径为:
- 错误日志:
/var/log/nginx/error.log - 访问日志:
/var/log/nginx/access.log
执行命令查看实时日志:
tail -f /var/log/nginx/error.log
日志中会记录请求的状态码、请求路径以及可能的后端错误提示。
二、临时调试模式(仅用于排查,调试后立即恢复)
1. 临时开启DEBUG获取错误页面
将settings.py中的DEBUG = False改为DEBUG = True,同时确保ALLOWED_HOSTS包含你的服务器IP或本地测试IP(比如ALLOWED_HOSTS = ['your-server-dns', '127.0.0.1']),重启服务后再次访问登录页,就能看到详细的Django错误页面,明确报错原因。
2. 解决本地DEBUG=False时无法访问的问题
当DEBUG=False时,Django不会自动处理静态文件,且runserver默认的访问限制更严格。可以:
- 运行
python manage.py runserver 0.0.0.0:8000绑定所有网卡,同时确保ALLOWED_HOSTS包含你的本地IP或127.0.0.1 - 临时开启
DEBUG=True来绕过静态文件和访问限制问题,优先排查核心错误
三、排查环境变量与数据库问题
1. 确认环境变量是否被Django进程读取
终端设置的环境变量可能不会被Django的运行进程(如uWSGI/Gunicorn或systemd服务)继承。可以在settings.py中添加临时代码验证:
import os print("DB_USER:", os.environ.get("DB_USER")) print("DB_PASSWORD:", os.environ.get("DB_PASSWORD"))
重启服务后查看进程日志,确认变量是否正确加载。如果是用systemd管理服务,需要在service文件中添加Environment配置,或者将环境变量写入/etc/environment并重启服务器。
2. 检查Azure SQL数据库的访问权限
确认Azure SQL数据库的防火墙规则是否允许AWS服务器的公网IP访问,若IP未被加入白名单,会导致数据库连接失败,进而触发500错误。可以登录Azure控制台,在SQL数据库的“防火墙和虚拟网络”设置中添加AWS服务器的IP地址。
内容的提问来源于stack exchange,提问作者Reactord

