[PHP-users 138] Re: 暴走するhttpd プロセスの正体を確かめたい

SAWADA Hodaka php-users@php.gr.jp
Wed, 20 Jun 2001 15:25:24 +0900


PHP-users に戻ったぞ!

At Wed, 20 Jun 2001 14:39:32 +0900,
Ryuzi Kambe wrote:

> > > ちょっとしたアクセス制限などにホスト名を利用する時があるのですが、
> > > それで名前がひけないと、Webサーバのプロセス全体が
> > > ロックしてしまうような感じでした。
> > > もしかして、DNSに対する問い合わせのタイムアウトの
> > > 部分も、PHPの中でコーディングしてやるべきなのでしょうか。
> > 
> > ということに関してなら、議論を進めたいと思います。
> > 
> > # でも、解決してしまいました?
> 
> Webサーバのプロセス全体がロックするような感じで、
> httpdが暴走するのは、特にアクセスが集中する時間帯
> (アクセスログの解析では午前0時前後にそれ以外の時間帯の
>  2倍〜3倍程度のアクセスがあります)

まずこっち、Apache の log に逆引きを残さないということで、
解決したんですよね。

> どうしてもgetenv("REMOTE_HOST")を利用したいときには、
> この問題がを解決することになると思いますが、まだ
> 不明確な部分もありますので、これ以上のML上での
> 議論は遠慮させていただこうと思います。 m(_ _)m

次に、でも「アクセス制限等で逆引きを使いたい」のですよね?
でしたら、Apache が逆引きして環境変数に設定したものを利用するのではなく、

1  $remote_host = strtolower (gethostbyaddr ($REMOTE_ADDR));
2
3  if (!ereg ("\.example\.co\.jp$", $remote_host)
4      and !ereg ("\.example\.com$", $remote_host)
5      )
6    {
7      die ("アクセスできません。");
8    }

てな感じでどうでしょう。
これなら、Apache の設定とは無関係に、PHP だけで逆引きができます。

増やしたいときは、4 行目を copy してください。
まぁ、数が多いときは and より or のほうがいいでしょうね。

あと、ドメイン制限じゃなくて、ズバリ hostname なら
if (!ereg じゃなくて、switch() case でもいいかも。


今回、一連の流れで getenv("REMOTE_HOST") が想像できなかった。(^^;;;)
やっぱコード見せろっていうのは重要ですね。
-- 
         =^^= HODA =^^=          http://www.tail.gr.jp/~hoda/
澤田保隆@しっぽアルゴリズム情報研究所  mailto:hoda@tail.gr.jp