web-dev-qa-db-ja.com

Django App Public IPは機能しますが、レコードの更新時に「400 BadRequestError」

Nginxとgunicornを使用してUbuntu16.04EC2インスタンスにDjangoアプリケーションをデプロイしました。

残念ながら、パブリックIPでの展開が成功した後、パブリックIPでAレコードを更新すると404 Bad Requestドメインでのエラー-DNSの変更が反映されていることを確認するために長い間待った後でも。パブリックIPによるアプリケーションへのアクセスは引き続き機能します。ネームサーバーのホストに連絡して、Aレコードの設定が正しく設定されているかどうかを確認しました。DNSの変更は成功したようですが、AWS側の問題であるように見えたため、解決できませんでした。

AレコードでパブリックIPを利用することが正しく機能せず、アプリケーションを指していない特定の理由はありますか?

ドメインがデプロイされたDjangoプロジェクトを正常に指すようにするのを手伝ってくれるかもしれない人に感謝します。現在、パブリックIPを介したアプリケーションへのアクセスは引き続き正常に機能します。Aレコード更新されているように見えますが、ドメイン(直接IPではない)を読み込もうとすると、400 BadRequestエラーが発生します。

2
twknab

私は解決策を見つけました。パブリックIPの使用は許容できるようですが、ドメイン名をALLOWED_HOSTSファイルとnginx構成の両方に追加できませんでした。

次のことを行うことで、ドメインがAWSEC2デプロイを正常に指すようにすることができました。

私は3つのことをしました:

  • まず、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

この後、私のページは正常に読み込まれました。

1
twknab

同じ問題があり、Gunicornでワーカークラスを構成することで解決しました。また、python 3.7、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
0
Slipstream