我只与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;
}
}
答案 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上发现了你的问题,并希望其他人也会这样,他们可能会幸免!