如何将Django应用程序部署到(AWS)域名?

时间:2017-10-14 06:44:30

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

我只与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

gunicorn

[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;
    }
}

2 个答案:

答案 0 :(得分:1)

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

  

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

答案 1 :(得分:0)

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

我做了三件事:

  • 首先,我更新了我的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上发现了你的问题,并希望其他人也会这样,他们可能会幸免!