Apache2.2とPHP5.2で質問です、Apacheのhttpd.confにおけるKeepAlive等の設定をPHPの特定領域だけ有効にする方法はありますか?PHPの記述でも構いません。OSはWindows Server 2008 R2です。


Apacheではホームページ用WebサーバとAndroidバイナリアプリにHTTPSでデータを送るためのWebサーバを兼ねています。
最近Apacheのserver-statusいわく、独自Androidバイナリアプリからの一部アクセスが増えてきてサーバ負荷が上がっていることがわかりました。
Androidバイナリアプリに送っているのは、HTMLではなくアプリの動作に関する独自記述で一回通信したら終わりです。
そこで該当通信箇所のKeepAliveはOffにして、PHPからの結果出力後、直ぐにApacheプロセスを閉じるようにすれば、AndroidバイナリアプリによるApacheリソースが低下し、サーバ負荷が下がるのではないか?と考えています。

方法についてご存じの方よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/11/13 15:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.3

回答回数1728ベストアンサー獲得回数320

ポイント166pt

HTTPヘッダに下記を送信することでKeep-Aliveは打ち消せます。

header("Connection: close");

http://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_36.htm

id:halohalolin

oil999さんありがとうございます

headerはlocationしか使ったこと無いので、興味深いです。試してみます。

2012/11/07 14:33:15

その他の回答3件)

id:papa-tomo No.1

回答回数362ベストアンサー獲得回数107

ポイント167pt

できないと思います。

根拠は、keepalive ディレクティブのコンテキストが「サーバ設定ファイル, バーチャルホスト」となっているからです。

http://www.apache.jp/manual/mod/core.html#keepalive

keepalive関連のコンテキストは全て「サーバ設定ファイル, バーチャルホスト」となっています。

ということは、バーチャルホストなら他のホストと異なる設定ができるということです。なので、問題のPHPをまるごと別のバーチャルホストに移設してサービスしたら良いと思います。

たとえば・・・

通常:www.exsample.com
PHP用:cgi.exsample.com

として、同じサーバで、ホストを分ければできるということになります。

他2件のコメントを見る
id:papa-tomo

こうしたら上手くいくかもしれません。

まずApacheにバーチャルドメインを作り、そこに問題のPHPだけを移し、そこにプロキシするようにmod_rewiteの設定をします。

RewriteEngine on
RewriteRule ^/php/(.*)$ http://cgi.exsample.com/$1 [P,L]


これで、www.exsample.com/php/xxxxx.php にアクセスすると内部的にcgi.exsample.com/xxxxx.php にアクセスしたようになります。cgi.exsample.com側は設定でKeepAlive offにしておけば良いと思います。

2012/11/06 17:04:21
id:halohalolin

パパトモさんありがとうございます。参考にさせて頂きます。

2012/11/07 14:37:23
id:saiken1212617 No.2

回答回数3ベストアンサー獲得回数0

ポイント167pt

前の方も答えているように、
KeepAliveなどはサーバ全体の設定になるためできないようです。

MaxKeepAliveRequestsで頑張っても、
AndroidからのリクエストでWebサーバ側の接続が切れても駄目ですよね。。
windowsでなければapache_child_terminate()が使えそうですが。。

ソフト側で処理をできるだけ軽くし、
MaxClientなどでできるだけ処理する設定をするのがよいのではと思います。

id:halohalolin

sasasasaisai さんありがとうございます。

PHPソースを調べていたところSQLのSELECT *を使っているところを見つけましたので、こういったところが他にないか調べて、軽くしてみたいと思います。

apache_child_terminate()も今回は使えないですが、参考にさせて頂きます。

2012/11/07 14:36:24
id:oil999 No.3

回答回数1728ベストアンサー獲得回数320ここでベストアンサー

ポイント166pt

HTTPヘッダに下記を送信することでKeep-Aliveは打ち消せます。

header("Connection: close");

http://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_36.htm

id:halohalolin

oil999さんありがとうございます

headerはlocationしか使ったこと無いので、興味深いです。試してみます。

2012/11/07 14:33:15
id:pigmon88 No.4

回答回数501ベストアンサー獲得回数25

id:halohalolin

pigmon88さん、返答有難う御座います。
しかしながら質問文読みましたか?

2012/11/09 20:36:01
  • id:halohalolin
    補足です。

    そもそもホームページ用WebサーバとAndroidバイナリアプリにHTTPSでデータを送るためのWebサーバを分ければ良いのですが、今のところその対応は難しいです。

    よろしくお願いいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません