【问题标题】:How do I deploy Django app to (AWS) domain name?如何将 Django 应用程序部署到 (AWS) 域名?
【发布时间】:2018-03-26 06:51:54
【问题描述】:

我只使用 Django 几个星期,刚刚学习了部署。我有一个 AWS EC2 实例,我可以将我的 Django 网站/应用程序部署到该实例(即,如果我在浏览器中访问 IP 地址,我就可以访问我的网站)。但是,我不知道如何将同一个网站部署到我在 AWS 上注册的域名。

我遵循 AWS 的文档 (http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html),https://cachecheck.opendns.com/ 显示我的域名路由到我的 EC2 实例。但是,当我在浏览器中访问我的域名时,它会显示 400 Bad Request。当我设置 nginx 或 gunicorn 时,我还需要做些什么吗?我尝试将 nginx 代码中的 {{yourEC2.public.ip}} 替换为我的域名而不是 IP 地址。

我无法在网上找到任何其他关于域名部署的资源,尤其是 AWS。

这是我用于部署到 EC2 实例的内容:

settings.py:

DEBUG = False
ALLOWED_HOSTS = ['{{yourEC2.public.ip}}']
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
(venv) ubuntu@54.162.31.253:~myRepoName$ python manage.py collectstatic

独角兽

[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/{{repoName}}
ExecStart=/home/ubuntu/{{repoName}}/venv/bin/gunicorn --workers 3 --bind 
unix:/home/ubuntu/{{repoName}}/{{projectName}}.sock 
{{projectName}}.wsgi:application
[Install]
WantedBy=multi-user.target

nginx:

server {
    listen 80;
    server_name {{yourEC2.public.ip}};
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/{{myRepoName}};
    }
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/{{myRepoName}}/{{projectName}}.sock;
    }
}

【问题讨论】:

  • 你在Route53中创建了一个记录集,A记录到IP地址还是CName到EC2实例的公共域名?
  • @Ashan:是的,我创建了一个记录集并将值设置为我的 EC2 实例/IP 地址。 @Selcuk:是的,如果我输入我的 IP 地址,我的 Django 应用程序/网站就会出现。只是在输入域名时不起作用。我会尝试设置ALLOWED_HOSTS

标签: django amazon-web-services nginx amazon-ec2 deployment


【解决方案1】:

您应该将ALLOWED_HOSTS 设置为您的主机名,例如['example.com', 'www.example.com']

表示此 Django 站点可以提供的主机/域名的字符串列表。这是一种防止 HTTP Host 标头攻击的安全措施,即使在许多看似安全的 Web 服务器配置下也可能发生这种攻击。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,实际上发现您的各种帖子也在寻求解决方案。有趣的是,我们俩在如此相似的时间窗口中遇到了完全相同的问题。

    我做了三件事:

    • 首先,正如 Selcuk 所说,我更新了我的 ALLOWED_HOSTS

      • ALLOWED_HOSTS = ['12.345.67.890', 'sub.domain.com', 'www.sub.domain.com']
    • 然后,我还在我的 nginx 配置中编辑了server_name 设置:

      • server_name 12.345.67.890 sub.domain.com www.sub.domain.com;
    • 最后,我重新启动了 nginx 并重新启动机器以确保一切正常:

      • sudo service nginx restart
      • sudo reboot

    在此之后,我能够加载我的域并且应用程序将加载。我知道你已经找到了你的解决方案,但我想把它正式化,因为我在 StackOverflow 上找到了你的问题,希望其他人也能这样,这样他们就可以幸免于难!

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2021-11-18
      • 2019-07-22
      • 2018-07-07
      • 2014-11-11
      相关资源
      最近更新 更多