web-dev-qa-db-ja.com

クライアントは、nginxで、クライアントへの送信中に途中で接続を閉じました

Nginx error.logにエラーがあります:

2010/12/05 17:11:49 [info] 7736#0: *1108 client closed prematurely connection while sending to client, 
client: 188.72.80.201, server:***.biz, request: "GET /forum/ HTTP/1.1", 
upstream:"http://***:3000/forum/", Host: "***.biz"

サイトには毎回500個の応答コードがあります。どうすれば修正できますか?

ありがとうございました。

29
Aleksey

設定[proxy_ignore_client_abort on;][1]はあなたを助けるかもしれません。

17
timurb

今日私はこの問題に長時間取り組んで、解決策を見つけました。
この修正は、ロードバランサーを使用する場合にのみ影響することに注意してください

ロードバランサーのアイドルタイムアウトを確認します。 ELBアイドルタイムアウトを60秒(デフォルト)に設定しましたが、リクエストがハングしているため、一定時間後に接続を閉じました。ただし、ELBはnginxの前にあるため、nginxは「クライアント」(この場合はELB)が接続を閉じていることをログに記録しています。

したがって、ELBを使用している場合は、次の場所に移動してください。
EC2->ロードバランサー->正しいものを選択->説明を下にスクロールしてアイドルタイムアウトを変更他のロードバランサーを使用している場合は、設定とタイムアウトを確認します。

また、プロキシのタイムアウトなどを変更する必要がある可能性があることに注意してください。

13
Henrik Peinar

プロキシバッファをオフにすると役立つことがわかりました

http {
   proxy_buffering off;
...
}

おそらく、バッファーが小さすぎるか、それよりも少ないでしょう。バッファサイズを変更した後、うまくいきます

proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 2048 8k;
7
Ivailo Bardarov

私も同じ問題を抱えて調査しました。私の場合、これはWebkit(Chrome)ブラウザーでのみ発生します。単一のリソースをロードする場合に必要な接続よりも多くの接続を楽観的に開きます。このような場合、過剰な接続は、不自然に、または少なくともHTTP動詞を送信せずに閉じられます。これにより、nginxで前述のエラーが発生します。

#1の答えについて:提案されたソリューションはどれも、プロキシとは何の関係もないので論理的です。

#2回答について:proxy_ignore_client_abort on; notは私のテストに役立ちます。

残念ながら、使用する以外の解決策は見つかりませんでした

error_log off;

2
vanthome

同じ問題がありましたが、sgin_timeoutの設定のためにnginxが接続を閉じることがわかりました。増やして修正しました。

http
{
send_timeout 20;
...
}
1
Omid