38

このサイトの django-on-twisted スクリプトを使用して、twisted で django アプリケーションを実行しています。

すべてのリクエストは、関連するリクエストを twisted にリバース プロキシする nginx サーバーによって処理されます。API 用の URL セットアップがあります。これは、基本的に get リクエストを受信し、応答を送信する前に get パラメータに対して何らかの処理を行います。ただし、特定のクライアントが API にアクセスすると、ツイスト サーバーはシャットダウンするだけです。以下に Nginx のログを貼り付けます。

the.ip.of.client - - [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24"

ねじれたログは、この時点でねじれた停止が機能していることを示しています。エラー コード 499 によって、クライアントが予期せず接続を閉じたと想定していますが、問題はありません。クライアントが応答を受け取るかどうかは、私にとって重要ではありません。関連するdjangoビューは次のとおりです。

def api_url(request):
    if request.GET:
        get_param = request.GET.get('get', [''])[0]
        more_param = request.GET.get('more', [''])[0]
        #some processing here based on the get params
        return HttpResponse('OK')
    else:
        raise Http404

クライアントからのリクエストは有効なリクエストであり、処理に悪影響を与えることはありません。シェルからテストしました。django 開発サーバーで試してみたところ、こちらも同様にクラッシュし、リクエストを受信した痕跡は残りませんでした。ブラウザからテストすると、すべてが完全に機能します。また、ツイスト サーバーは、すべての通常のユース ケースでうまく機能します。問題に直面したのはこれが初めてです。ヘルプやポインタをいただければ幸いです。

4

2 に答える 2

1
  • 問題はクライアントが特定の URL にアクセスしたことによるものだとおっしゃっています (再現可能ですか?)
  • Gunicorn では機能しますが、django-on-twisted では機能しないため、スクリプトが正しく機能していないかtwisted.web2、問題が発生しています。

お試しください$ sh init.sh yourdjangoproject stand

run.pycatchに変更することもできますSystemExit:

import pdb
try:
   # __main__ stuff here.
except (KeyboardInterrupt, SystemExit):
   pdb.set_trace()
于 2012-10-12T08:53:48.533 に答える
1

RFC には 499 http コードはありません。Nginx は 499 コード自体を定義します。

クライアントがリクエストを送信し、レスポンスを待たずに接続を閉じた場合、499 コードが発生します。access_log に多くの 499 がある場合、それは主に遅いバックエンド (ユーザーが待つには遅すぎる) が原因です。Web サイトのパフォーマンスを最適化する必要がある場合があります。

http://forum.nginx.org/read.php?2,213789,213794#msg-213794

于 2012-09-02T20:21:36.620 に答える