2

Nginx からのリクエストを受信して​​、CherryPy の WSGI サーバー経由で提供される Python アプリケーションがあります。これは Windows Server 2003 ボックスでホストされており、アクセスするユーザーはごくわずかです。

特定のリソースへのリクエストが、 Firefoxの502 Bad Gatewayでほぼ瞬時に失敗することがあります。他のブラウザで問題を再現しようとしましたが、成功しませんでした。

アプリケーションは次のように開始されます。

paths = { "/resource": resource_func }
dispatcher = wsgiserver.WSGIPathInfoDispatcher(paths)
server = wsgiserver.CherryPyWSGIServer(("127.0.0.1", 9191), dispatcher)
server.start()

nginx サーバーは、次の方法でリクエストを CherryPy に転送していますproxy_pass

location / {
    proxy_pass         http://127.0.0.1:9191/;
    proxy_redirect     off;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

リクエストは jQuery.ajax メソッド経由で送信されます。

$.ajax(requestURI).done(myRequestCallback);

Firebug を実行し、502 が発生したときに nginx エラー ログを開くと、次のエラーが表示されます。

(time): *92 WSASend() failed (10054: An existing connection was forcibly closed by the remote host) while sending request to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET /resource?params=VALUES&_=1371674388573 HTTP/1.1", upstream: "http://127.0.0.1:9191/resource?params=VALUES&_=1371674388573", host: "xxx.xxx.xxx.xxx:9080", referrer: "http://172.27.129.112:9080/myAppPage.html"

...xxx.xxx.xxx.xxxアプリケーションをテストしている IP はどこで、nginx はリッスンしてい9080ます。

失敗したリクエストはアプリのログ ファイルに表示されず、同じリソースとパラメーターが有効です (リクエストはすべての試行で失敗するわけではありません)。

nginx.conf ファイルに次の行を追加して (その後、両方のサーバーを再起動して) 問題を解決しようとしましたが、違いはないようです。

proxy_buffers 8 16k;
proxy_buffer_size 32k;

バージョンは次のとおりです。

  • Firefox 21
  • パイソン 2.7.5
  • nginx 1.2.0
  • チェリーパイ 3.2.2

エラーの原因は何ですか?

4

1 に答える 1

0

私がこれを見たとき(CherryPyではなく、Gunicorn/othersで)、サーバーが再起動していて、Nginxがそれに接続できないためです。サーバー上で、CherryPy の再起動を引き起こしている可能性のある何かが他に起こっていますか?

于 2013-06-19T23:19:19.227 に答える