You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Django AWS EC2中Gunicorn ExecStart/ExecStop缺失错误及Route53配置问题?

解决AWS Route53指向EC2 Django应用时的Gunicorn服务报错问题

咱们先从你遇到的核心报错入手:gunicorn.service: Service lacks both ExecStart= and ExecStop= setting. Refusing. 这说明你的systemd服务配置文件里缺少了启动和停止Gunicorn的关键指令,导致服务无法正常初始化。下面一步步帮你解决:

1. 修复Gunicorn Systemd服务配置

首先找到你的gunicorn.service文件(通常在/etc/systemd/system/目录下),替换成包含完整启动/停止指令的配置。下面是一个适配Django项目的示例配置,记得替换成你自己的路径和用户名:

[Unit]
Description=gunicorn daemon for Django app
After=network.target

[Service]
User=ubuntu  # 替换成你的EC2实例用户名(比如ubuntu/ec2-user)
Group=www-data
WorkingDirectory=/home/ubuntu/your-django-project  # 替换成你的Django项目根目录
ExecStart=/home/ubuntu/your-venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/your-django-project/your-project.sock your-project.wsgi:application
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

配置说明:

  • WorkingDirectory:指定Django项目的根目录,确保Gunicorn能找到项目文件
  • ExecStart:通过虚拟环境启动Gunicorn,绑定到unix套接字(比直接绑定端口更安全高效),最后指向你的Django项目的wsgi.py模块
  • ExecStop:定义停止Gunicorn服务的指令

配置完成后,重新加载systemd并启动服务:

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl status gunicorn

如果服务状态显示active (running),再设置开机自启:

sudo systemctl enable gunicorn

2. 验证Django项目基础配置

检查settings.py里的ALLOWED_HOSTS,必须包含你的Route53域名和EC2公网IP,否则Django会拒绝请求:

ALLOWED_HOSTS = ['your-domain.com', '1.2.3.4']  # 替换成你的域名和EC2公网IP

同时可以先直接启动Django测试服务器验证项目本身没问题:

source /home/ubuntu/your-venv/bin/activate
python manage.py runserver 0.0.0.0:8000

此时用EC2公网IP:8000访问,确认能正常打开Django页面。

3. 确认Nginx配置匹配Gunicorn

虽然你说Nginx配置测试成功,但要确保它正确指向Gunicorn的套接字(或端口)。示例Nginx配置如下:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    # 处理静态文件
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/your-django-project;
    }

    # 转发动态请求到Gunicorn
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/your-django-project/your-project.sock;
        # 如果Gunicorn绑定的是端口,这里改成 proxy_pass http://127.0.0.1:8000;
    }
}

配置完成后重新加载Nginx:

sudo nginx -t && sudo systemctl reload nginx

4. 检查AWS网络与Route53配置

  • EC2安全组:确保开放了80端口(HTTP),允许所有IP(0.0.0.0/0)或指定IP访问
  • Route53记录集:确认A记录的值是EC2的公网IPv4地址,TTL可以设为300(5分钟),等待解析生效后用nslookup your-domain.com验证解析是否正确

5. 排查后续可能问题

如果Gunicorn启动失败,查看详细日志定位原因:

sudo journalctl -u gunicorn

常见问题包括:虚拟环境路径错误、套接字文件权限不足(确保www-data用户能访问)、Django依赖未安装完全等。

内容的提问来源于stack exchange,提问作者user1426442

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:29