![Django 应用程序公网 IP 可用,但更新记录时出现“400 错误请求错误”](https://linux22.com/image/712074/Django%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%85%AC%E7%BD%91%20IP%20%E5%8F%AF%E7%94%A8%EF%BC%8C%E4%BD%86%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9C400%20%E9%94%99%E8%AF%AF%E8%AF%B7%E6%B1%82%E9%94%99%E8%AF%AF%E2%80%9D.png)
我已经使用 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