Django 应用程序公网 IP 可用,但更新记录时出现“400 错误请求错误”

Django 应用程序公网 IP 可用,但更新记录时出现“400 错误请求错误”

我已经使用 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

相关内容