2016-12-26 6 views
4

ランダムサイズ(20文字から30k文字)のPOST要求を処理するDjangoビューを持っています。このAPIは登録ユーザーのみ利用可能であり、セッションヘッダーで検証されます。 APIは私のテストケースでうまく動作しますが、Nginxのログには502があります。エラーログを表示このライン::いくつかのテストの後Nginx + uWSGI + Djangoは大きなリクエストボディと期限切れのセッションのときに502を返す

2016/12/26 19:53:15 [error] 1048#0: *72 sendfile() failed (32: Broken pipe) while sending request to upstream, client: XXX.XXX.XXX.XXX, server: , request: "POST /api/v1/purchase HTTP/1.1", upstream: "uwsgi://unix:///opt/project/sockets/uwsgi.sock:", host: "staging.example.com" 

は、私は大きな体の要求に、このコールを再作成するために管理しました。起こるように見える何

curl -XPOST https://staging.example.com/api/v1/purchase \ 
-H "Accept: application/json" \ 
-H "token: development-token" \ 
-H "session: bad-session" \ 
-i -d '{"receipt-data": "<25677 character string>"}' 
HTTP/1.1 100 Continue 

HTTP/1.1 502 Bad Gateway 
Server: nginx/1.4.6 (Ubuntu) 
Date: Mon, 26 Dec 2016 19:54:32 GMT 
Content-Type: text/html 
Content-Length: 181 
Connection: keep-alive 

<html> 
<head><title>502 Bad Gateway</title></head> 
<body bgcolor="white"> 
<center><h1>502 Bad Gateway</h1></center> 
<hr><center>nginx/1.4.6 (Ubuntu)</center> 
</body> 
</html> 

は、Djangoはセッションが有効でないことを確認し、クライアントの仕上がりが体を提供する前に応答(403)を返すということです。

もし私が正しいのであれば、DjangoはNginxの代わりにヘッダをチェックした後に100状態を送信する方法がありますか?

もしそうでなければ、ヘッダをチェックする前にボディを待つよりも洗練された解決策がありますか?

答えて

0

クライアントにHTTPヘッダーconnection:keep-aliveを追加すると、この問題が修正されるはずです。statementが見つかりました。私はそれを後で検証しますが、すでにここに掲示して、誰かを助けることを願っています。

+1

ありがとうございました。私はこれを確認する時間がありません。あなたや他の人がこれを確認できるなら、それは素晴らしいでしょう。 – joaonrb

関連する問題