Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Django应用程序部署到(AWS)域名?_Django_Amazon Web Services_Nginx_Amazon Ec2_Deployment - Fatal编程技术网

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

如何将Django应用程序部署到(AWS)域名?,django,amazon-web-services,nginx,amazon-ec2,deployment,Django,Amazon Web Services,Nginx,Amazon Ec2,Deployment,我只和Django一起工作了几个星期,刚刚学会了部署。我有一个AWS EC2实例,我可以将Django网站/应用程序部署到该实例(即,如果我转到浏览器中的IP地址,我就可以访问我的网站)。然而,我不知道如何将同一个网站部署到我的域名上,该域名已在AWS上注册 我遵循AWS的文档(),并显示我的域名路由到我的EC2实例。然而,当我在浏览器中访问我的域名时,它显示了400个错误请求。当我设置nginx或gunicorn时,是否还需要执行其他操作?我尝试将nginx代码中的{{{yourEC2.pub

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

我遵循AWS的文档(),并显示我的域名路由到我的EC2实例。然而,当我在浏览器中访问我的域名时,它显示了400个错误请求。当我设置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;
    }
}
您应该设置主机名,例如
['example.com','www.example.com']

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


我也有同样的问题,事实上,我发现你的各种帖子也在寻求解决方案。有趣的是,在如此相似的时间窗内,我们两人都遇到了完全相同的问题

我做了三件事:

  • 首先,我更新了我的
    允许的\u主机
    ,正如Selcuk指出的:

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

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

    • sudo服务nginx重启
    • sudo重启

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

您是否在Route53中创建了一个记录集,一个记录到ip地址或一个CName到EC2实例的公共域名?@Ashan:是的,我创建了一个记录集,并将值设置为我的EC2实例/ip地址@是的,如果我输入我的IP地址,我的Django应用程序/网站就会显示出来。输入域名时,它就是不起作用。我将尝试设置
允许的\u主机