HTTPエラー502とPHPの関係 - PHPプロ!Q&A掲示板

63

  • 100P

HTTPエラー502とPHPの関係

質問日時 / 2006年7月4日 12:12    回答数 / 6件

Questioner:  NEKOGT  このエントリーをはてなブックマークに追加 

キーワード / apache    HTTPエラー   

はじめまして。NEKOGTと申します。

RedHatEnterpriseLinux Version4
apache-2.0.54
php-4.4.2
Oracle10g

上記環境にて、携帯用WEBアプリケーションでPHPを使っているのですが、
かなりの頻度で「HTTPエラー502(BadGateway)」(apacheのログでは、
「SegmentationFault」)が出てしまいます。

仕方なく、apacheのconfファイルの「KeepAlive」をON⇒OFFにした結果、
このエラーは消滅したのですが、KeepAliveをOFFにするのはWEBシステムの
パフォーマンス的には邪道のような気がします(気のせい?)
また、PHP側に何かしら問題があるのでは?という不安もあります。

商用システムのためPHPソースの公開はできませんが、
・apacheのKeepAliveはOFFでもOK
・PHPのソースを洗いなおした方がいい
のどちらが正しいのでしょうか?

内容的にPHPから逸れてしまっているかもしれませんが、一般的なご意見でも
結構ですので、どなたかご教示くだされば幸いです。

宜しくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01snowstyle情報が少ないため、あくまでも推測ですが。 おそら
┃┗A01-1NEKOGTご返事ありがとうございます。 私の投稿内容が不十
┣A02MugeSo携帯用である場合 ・対象キャリアがどこ(Au, DoCoMo,
┃┗A02-1NEKOGTご返事、ありがとうございます。 対象キャリアは、
┗A03ucb2004携帯からのアクセスで502なわけですよね? 502はゲー
 ┗A03-1NEKOGTご返事、ありがとうございます。 以下の点について

回答一覧

並び替え:

A01
answerersnowstyle [7月5日 02:35]

情報が少ないため、あくまでも推測ですが。

おそらくエラーの意味からすると、PHPやApacheの問題ではなく、ネットワーク関連のエラーですね。PROXYやGateway関連のエラーです。(エラーの意味からするとですが)

但し、SegmentationFaultが出ているということは、ApacheやPHPのバグの可能性もあります。各アプリを最新版にしてみることで改善されるかもしれません。

サーバにインストールされているアプリや、OSのバグも疑る必要もありますね。

ちなみに、KeepAliveに関しては、HTTPのセッションを毎回切断するか、接続ごとに維持するか(ちょっと意味がわかりにくいかもしれませんが)の設定です。
ここは運用によって変更したほうが良いと思います。

どこでエラーが起きているかを確実に再現できればそこから切り分けることは可能でしょう。いづれにしても質問の情報では私の脳内DBでは、これ以上は難しいです。

参考になればと・・・。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerNEKOGT [7月5日 13:58]

ご返事ありがとうございます。

私の投稿内容が不十分であるにも関わらず、参考となるご意見ありがとうございます。
私も当初はHTTPエラー502ということで、DNSまでトコトン調べたのですが特に異常は見つからず、Apacheのconfをいじって何とか逃げてる状況です。
確かに、ApahceやPHPのバグの可能性もありますよね。
機会を狙って、最新にするか、パッチをあてるかしてみたいと思います。

ありがとうございました。

NEKOGT.

この意見に回答する

ツリーへ TOPへ

A02
answererMugeSo [7月5日 08:54]

携帯用である場合
・対象キャリアがどこ(Au, DoCoMo, Softbank)であるか
・公式サイトであるか

などが絡んできます。

Keepaliveの設定については、Auの公式サイトである場合、
状況によってはOnにする必要が出てきます。
もし公式サイトを開発しているなら、
キャリアからの情報を参照できると思いますので、そちらでご確認ください。

以上をクリアし、KeepAliveをオフにすることで問題が解消することが確実なら、
改善する工数とパフォーマンス低下と相談して
offにしてやり過ごすという選択もありだと思います。

ただ、今回はSegmentationFaultが出ているとのことですので、
まずはそちらの確認をする必要があるかと思います。

この意見に回答する

ツリーへ TOPへ

A02-1
replyerNEKOGT [7月5日 14:14]

ご返事、ありがとうございます。

対象キャリアは、ご指摘の通り大手3社となります。
そして、どのキャリアでもHTTPエラー502が出る状況でした。

Au公式サイトではないので、とりあえず「KeepAlive=Off」は気にしなくてもいいかもしれませんね・・・。ですが、「Au公式サイトの場合KeepAliveを意識した方がいい」というのは、大変興味深い話です。

SegmentationFaultが、PHPもしくはApahceのバグなのか、PHPのアプリの出来が悪いのか、機会を見つけて検証してみたいと思います。

どうもありがとうございました。

NEKOGT.

この意見に回答する

ツリーへ TOPへ

A03 満足
answererucb2004 [7月6日 00:26]

携帯からのアクセスで502なわけですよね?
502はゲートウェイ/プロキシ経由での通信で、上位のサーバ(普通は本来のアクセス先)から不正なレスポンスを受信した場合に、ゲートウェイ/プロキシが吐くものです。携帯端末でのアクセスは必ずキャリアのゲートウェイ/プロキシを経由しますから、本来のアクセス先が不正なレスポンスを返せば、とにかくこのステータスが返され、しかしこれは本来のアクセス先で生じている異常の内容まで示しているわけではありません。

で、SegmentationFaultが発生し、KeepAliveを無効にすることで症状が発生しなくなるということは、KeepAlice状態中になんらかの理由でサーバのリソースが食い潰されてしまう状況が生じているのではないかと想像され、抜本的にはアプリケーションの改修が必要だとは思われますが、暫定的な対処としてはKeepAliveを無効にするのではなく、Apacheのプロセスチューニングに関するディレクティブ、特にMaxKeepAliveRequests、KeepAliveTimeout、そしてMaxRequestsPerChildあたりを調整してみたほうがいいのではないかと思われます。

また、SegmentationFaultの直接の原因はメモリがらみである場合が多いと思いますので、php.iniのmemory_limit値を見直してみるといいかもしれません。あるいは、PHPスクリプトが使用した最大メモリサイズをログに記録して検証してみると、なにかわかるかもしれません。ログの記録方法は以下あたりでどうぞ。
http://ns1.php.gr.jp/pipermail/php-users/2003-July/017329.html

この意見に回答する

ツリーへ TOPへ

A03-1
replyerNEKOGT [7月6日 21:31]

ご返事、ありがとうございます。

以下の点について、実戦的な効果・対策を見出せたような気がします。
①一時的な回避方法について、無下にKeepAliveをOFFにせず、ほかの箇所を調整することをご指南頂いた点。
②PHPが悪さをしている可能性を突きつめるための調査方法(ログの記録方法)をご指南頂いた点。

早速、調査に入りたいと思います。
若輩者にご協力頂き、ありがとうございました。

NEKOGET.

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)