我已经使用 nginx 和 gunicorn 在 Ubuntu 16.04 EC2 实例上部署了一个 Django 应用程序。
不幸的是,在使用我的公共 IP 成功部署后,使用公共 IP 更新我的 A 记录时,404 Bad Request
我的域中出现了错误——即使等待了很长时间以确保 DNS 更改已传播。通过公共 IP 访问应用程序仍然有效。我确实联系了我的名称服务器主机,以确认我是否正确设置了我的 A 记录设置:他们说 DNS 更改似乎成功了,但无能为力,因为这似乎是 AWS 方面的问题。
是否有特定原因导致我的 A 记录中的公共 IP 无法正常工作且无法指向我的应用程序?
感谢任何能够帮助我使我的域名成功指向我部署的 django 项目的人。目前,通过公共 IP 访问应用程序仍然正常,A 记录似乎已更新,但任何加载域名(而非直接 IP)的尝试都会出现 400 Bad Request 错误。
答案1
我找到了解决办法。看起来使用公共 IP 是可以接受的,但我无法将我的域名添加到文件ALLOWED_HOSTS
和 nginx 配置中。
通过执行以下操作,我能够让我的域成功指向我的 AWS EC2 部署:
我做了三件事:
- 首先,我更新了我的
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
此后,我的页面加载成功。
答案2
我遇到了同样的问题,并通过在 Gunicorn 中配置 worker-class 解决了。另外,我在 python 3.7 中使用 gevent 遇到了一些问题,最好使用 3.6。
Django,Python 3.6 示例:
安装:
pip install gevent
跑步:
gunicorn --chdir myApp myApp.wsgi --workers 2 --worker-class=gevent --bind 0.0.0.0:80 --timeout=90 --graceful-timeout=10