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
エラーの原因は何ですか?