人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

リバースプロキシ + アプリケーションサーバな構成で動作するサービスを構築しています。
ここから質問です。
画像を投稿するプログラムを作成し、実際にアップロードしてみたのですが、
画像数が少ない時(1度に5枚までの画像をアップロード出来る)は特に問題無く処理が完了するのですが、ある程度画像の総サイズが大きくなると
<<<
Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request POST /huga/hoge/

Reason: Error reading from remote server
>>>
とProxy Errorが発生してしまいます。
このプログラムの処理は主に下記の通りです。
・アップロードされた画像から各種サムネイル作成
・画像用サーバにFTP接続し、ユーザー用のディレクトリ確認。(存在しなかったらmkdir)
・各種画像をアップロード
・画像情報をDBに記録。
・言語はPHP5.1.6
尚、サムネイルは問題無く生成されFTPでのアップロードも出来ています。
アプリサーバ側のログではステータスコード200で問題無しです。


大まかに書きましたが、どのような原因が考えられるでしょうか?
※足りない情報がありましたら、すぐに回答へのコメントにて追記します。
※文字数制限でかなり削りました…

●質問者: maoya
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB FTP hoge Proxy Reason
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●27ポイント
アプリサーバ側のログではステータスコード200で問題無しです。

との事から Proxy <-> アプリケーションサーバー間の通信に問題がある可能性を考えます。


リバースプロキシに何を使用されているかが分からないのですが、proxy 側でリクエストのサイズ制限、またはレスポンスのタイムアウトが設定されていませんか?

それぞれ制限されているようなら緩和する事で対応できるかもしれません。

◎質問者からの返答

との事から Proxy <-> アプリケーションサーバー間の通信に問題がある可能性を考えます。

私もそう思っています。

サイズ制限、タイムアウトの設定は特に設定しておりません。

設定していないのが問題だったりしませんか?


2 ● b-wind
●27ポイント
設定していないのが問題だったりしませんか?

使われているOS・Proxyソフトウェアが分からないのでなんとも…。


一般的には無限に受け付ける事は無いので、デフォルトである程度の制限はあります。

また、タイムアウトに関してはOSの制限を受けるかもしれません。


アプリケーションサーバー単体で動作させた場合(リバースプロキシを使用しない)正常に動作するのでしょうか?

また、その場合実行時間はどの程度かかっているのでしょうか?

◎質問者からの返答

Proxy側の情報を。

OSはDebian 2.8.4で、サーバはApache2.0.54です。

リバースプロキシはmod_rewrite + mod_proxyで構築しています。

Pound等は使用していません。

アプリケーションサーバー単体で動作させた場合(リバースプロキシを使用しない)正常に動作するのでしょうか?

正常に動作します。

また、その場合実行時間はどの程度かかっているのでしょうか?

初めて計りましたが42秒です。

5枚合計で4.5Mの画像をアップロードしました。


3 ● b-wind
●26ポイント

なるほど。42秒は結構長いですね。

5枚で 42 秒と言う事は今回問題になっているパターンではそれ以上の枚数という事でよいでしょうか?

http://httpd.apache.org/docs/2.0/ja/mod/mod_proxy.html

一応 ProxyTimeout のデフォルトは 300秒なので問題は無いはずですが試してみるのもいいかもしれません。

あと変更できるので関係ありそうなのは、ProxyIOBufferSize と ProxyReceiveBufferSize ぐらいでしょうか。


あとは関係有るかどうか分かりませんが、PHP の方で Content-length は出していますか?

これが無いと Proxy はいつまで待っていいかわからないときがあるので。

◎質問者からの返答

なるほど。42秒は結構長いですね。

やはり長いですよね。。。

今回問題になっているパターンではそれ以上の枚数という事でよいでしょうか?

とりあえず当面はアップロード枚数は5枚までとする予定です。

ProxyIOBufferSize と ProxyReceiveBufferSizeに関してはほとんど知識が無いのでこれからマニュアルを見て調べてみます。

PHP の方で Content-length は出していますか?

今のところ出していません。

これもちょっと問題あるかもですね。

#確かエラーになった時はステータスコード502で、Content-lengthが404になってました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ