実現したいこと
nginx(リバースプロキシ)の「アップストリームからの応答ヘッダーの読み取り中に接続を途中で閉じました。」のエラーを出ないようにしたい
前提
EC2のインスタンス上にDjangoで作成したWEBアプリをデプロイして運用しています。
一つのEC2上に以下の3つのサーバを立ち上げており、
①nginxのWEBサーバ(リバースプロキシ)
②djangoのAPサーバ
③postgreSQLのDBサーバ
今回、djangoのAP側に機械学習で事前学習データを読み込む処理を追加し、初回実行時のみ重たくなるような仕様になったのですが、本番環境にデプロイしたところ、その処理を実行する際に10秒後くらいにnginxのエラー画面が表示されるようになりました。
試したこと
nginxのエラーログを確認したところ、
「アップストリームからの応答ヘッダーの読み取り中に接続を途中で閉じました。」とのエラーが出てました。
親(APサーバ)からnginx(リバースプロキシ)への応答でタイムアウトしていると思い、ググってみてnginx.confの設定を以下の2通り変更をしてみたのですが、どちらの場合も解消しませんでした。
お力添えいただけますと幸いです。
元の設定
nginx.conf
1 location / { 2 proxy_set_header Host $http_host; 3 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 4 proxy_set_header X-Forwarded-Proto $scheme; 5 6 proxy_pass http://127.0.0.1:8000; 7 } 8
変更①(httpのバージョン指定などの魔法)
nginx.conf
1 location / { 2 proxy_set_header Host $http_host; 3 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 4 proxy_set_header X-Forwarded-Proto $scheme; 5 6 # 追加 7 proxy_http_version 1.1; 8 proxy_set_header Connection ""; 9 10 proxy_pass http://127.0.0.1:8000; 11 }
変更②(タイムアウト時間をでたらめに増やしました)
nginx.conf
1 location / { 2 proxy_set_header Host $http_host; 3 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 4 proxy_set_header X-Forwarded-Proto $scheme; 5 6 # 追加 7 proxy_connect_timeout 600; 8 proxy_send_timeout 600; 9 proxy_read_timeout 600; 10 send_timeout 600; 11 12 proxy_pass http://127.0.0.1:8000; 13 }
発生している問題・エラーメッセージ
「アップストリームからの応答ヘッダーの読み取り中に接続を途中で閉じました。」
error.log
12023/03/27 20:46:46 [error] 24984#24984: *1 upstream prematurely closed connection while reading response header from upstream, client: <PCのIPアドレス>, server: <ElasticIP>, request: "POST /<対象の処理のパス>/ HTTP/1.1", upstream: "http://127.0.0.1:8000/<対象の処理のパス>/", host: "<対象のドメイン>", referrer: "https://<対象のドメイン>/<対象の処理のパス>/"
補足情報(FW/ツールのバージョンなど)
nginx/1.22.1
DJango/3.2.18
EC2/Amazon linux 2/t2.micro
回答1件
あなたの回答
tips
プレビュー