在AWS EC2上用Apache部署Django Rest API遇内部服务器错误求助
解决Django DRF API在AWS EC2+Apache部署的500内部错误问题
先别急,500错误虽然头疼,但咱们一步步排查就能搞定。首先,Apache的错误日志是你最好的帮手,先去扒日志内容,能直接定位问题:
# 实时查看Apache错误日志 sudo tail -f /var/log/apache2/error.log
接下来按下面的步骤逐一排查:
1. 先把Django项目的基础配置捋顺
- ALLOWED_HOSTS必须配置:在
settings.py里一定要加上EC2实例的公网DNS、公网IP,测试阶段也可以先填*(生产环境记得改回来):ALLOWED_HOSTS = ['你的EC2公网DNS', '你的EC2公网IP', 'localhost'] - 静态文件要手动收集:Django在生产环境不会自动处理静态文件,必须执行收集命令:
执行时会提示是否覆盖,输入cd ~/API/djangorest python manage.py collectstaticyes确认,确保所有静态文件都被放到/home/ubuntu/API/djangorest/static目录里。 - DEBUG模式调整:如果是排查阶段,可以临时把
DEBUG = True,这样能看到更详细的错误信息(排查完务必改回False,避免泄露敏感信息)。
2. 验证Apache配置的细节
你的配置文件大体没问题,但有几个关键点要确认:
- 文件权限必须给够:Apache运行的用户(通常是
www-data)需要有访问项目目录的权限,执行这两条命令搞定:sudo chown -R www-data:www-data /home/ubuntu/API/djangorest sudo chmod -R 755 /home/ubuntu/API/djangorest - 虚拟环境要指定(如果用了的话):如果本地是用虚拟环境开发的,EC2上也得让Apache用同一个虚拟环境的依赖。修改你的
/etc/apache2/sites-enabled/djangorest.conf,加上这两行:
替换掉原来的WSGIDaemonProcess djangorest python-home=/home/ubuntu/API/djangorest/venv python-path=/home/ubuntu/API/djangorest WSGIProcessGroup djangorestWSGIPythonPath就行,这样Apache会调用虚拟环境里的Python和依赖包。 - 修改配置后必须重启Apache:
sudo systemctl restart apache2
3. 检查Python依赖是否匹配
EC2的系统Python版本可能和你本地不一样,或者缺少依赖包:
- 先在EC2上创建并激活虚拟环境,重新安装依赖:
确保所有Django、DRF等依赖都安装到位。cd ~/API/djangorest python -m venv venv source venv/bin/activate pip install -r requirements.txt
更适合新手的简化部署方案
如果觉得Apache配置太繁琐,推荐两个更省心的方案:
方案1:Docker容器部署
把你的Django项目打包成Docker镜像,在EC2上直接运行容器,不需要折腾Apache。只需要在项目根目录写个Dockerfile和docker-compose.yml,构建镜像后启动容器就行,生产环境搭配gunicorn+nginx也比手动配置Apache简单。
方案2:AWS Elastic Beanstalk
这是AWS专门做Web应用托管的服务,几乎零服务器配置:
- 安装EB CLI工具
- 在项目根目录执行
eb init初始化应用 - 执行
eb create创建部署环境,EB会自动帮你搞定服务器、负载均衡、数据库等所有配置,直接把你的API部署上线。
内容的提问来源于stack exchange,提问作者IslandNation
相关产品推荐
相关产品推荐

