Apache Module Registry 承認済みモジュール

自身が一番興味を持って取り組んだ分野のひとつである、Apache HTTP ServerとApache Module。

これらで使えぞうなのは、Apache Module Registryに申請している。

現在、自身で書いたApache Moduleで、Apache Module Registryにおいて承認されているmoduleを簡単に説明する。

[important]

[/important]

とりあえず、以上のモジュールは一定水準のクオリティ(ある程度使える)であると思われる。

続きを読む

What is mod_vlimit. “limit the number of simultaneous connections”

Preface

This is the distribution page for the Apache module mod_vlimit.

mod_vlimit allows “Apache HTTP Server” administrators to limit the number of  simultaneous connections(exec cgi php)  from the same IP address or all to any files.

If client accessese are over the limit connections, mod_vlimit return 503 error message to the client.

[warning]
mod_vlimit is for Apache 2.x.
If you use “VirtuaHost”, This is OK.
mod_vlimit is approved Apache module by “Apache Module Registry“.
[/warning]

 

Downloads

mod_vlimit is approved Apaceh module by “Apache Module Registry“.

You can search or browse on “Apache Module Registry“, if you’d like to get the information for mod_vlimit.

[note]

[/note]

続きを読む

近頃のオープンソースクラウド基盤動向

最近はクラウド基盤と呼ばれるオープンソースソフトウェアについて、セミナーや勉強会が盛んに行われている。

クラウド基盤とは、クラウド(コンピューティングリソースをプールしておき、必要最低限の手間で、消費者が使いたいと思ったときに、リソースをすぐにプロビジョニングできる状態)環境を構築するためのソフトウェアだ。

amazonEC2と同じような仕組みを作ることができると思ってもらえればよい。

僕自身もEC2等には非常に興味があるので、動向調査や研究の意味で勉強会にも参加したりしている。

ということで、現状のオープンソースのクラウド基盤でどういったものがあるのかを簡単にまとめようと思う。

 

注目されているクラウド基盤

現在、オープンソースとしてのクラウド基盤で注目されているソフトウェアは以下の4つである。

[important]

  • Eucalyptus
  • OpenStack
  • CloudStack
  • Wakame

[/important]

である。

ではそれぞれについて、簡単な特徴を説明する。

続きを読む

PXEブートとNFSとメモリ上でOS起動を組み合わせる

題名の通りなのだが、PXEブートとNFSとメモリ上でOS起動を連携させることで、結構なことができるようになる。

例えば、自動インストールを考えてみよう。

上記の3要素をうまく使えば、kickstartにはあまりそぐわないようなインストール方法をとることができる。

どういった場合かというと、

[note]

  • HDDのデータをまるごとバックアップしておいて、壊れた場合はサーバー再起動するだけで自動復旧
  • kickstartでは融通がきかないような作り込まれたシステムでも、サーバー再起動するだけで自動インストール
  • サーバー毎のインストールデータを/からそれぞれ保持しておいて、新しいサーバーを再起動するだけで用途にあったデータをコピーして自動インストール[/note]

などである。

続きを読む

VirtualHost名だけでなくServeAliasもみる

VirtualHost対応のために、アクセス時のホスト名とVirtualHost名をapacheモジュール内で比較させる方法がある。 しかし、これだけでは不十分で、実際にはServerAliasの設定がされているサーバーも多く、Aliasとマッチさせる必要もでてくる。 そのための関数を書いてみた。以下ソース。

static int check_virtualhost_name(request_rec *r) {

    int i;
    const char *header_name;
    const char *alias_name;

    header_name = apr_table_get(r->headers_in, "HOST");

    if (strcmp(header_name, r->server->server_hostname) == 0) {
        vlimit_debug_log_buf = apr_psprintf(r->pool, "Match: access_name=(%s) ServerName=(%s)"
            , header_name
            , r->server->server_hostname
        );
        VLIMIT_DEBUG_SYSLOG("check_virtualhost_name: ", vlimit_debug_log_buf, r->pool);
        return 0;
    }

    for (i = 0; i < r->server->names->nelts; i++) {
        alias_name = (char **)r->server->names->elts + (r->server->names->elt_size * i);
        vlimit_debug_log_buf = apr_psprintf(r->pool, "INFO: access_name=(%s) ServerAlias=(%s)"
            , header_name
            , alias_name
        );
        VLIMIT_DEBUG_SYSLOG("check_virtualhost_name: ", vlimit_debug_log_buf, r->pool);
        if (strcmp(header_name, alias_name) == 0 ) {
            vlimit_debug_log_buf = apr_psprintf(r->pool, "Match: access_name=(%s) ServerAlias=(%s)"
                , header_name
                , alias_name
            );
            VLIMIT_DEBUG_SYSLOG("check_virtualhost_name: ", vlimit_debug_log_buf, r->pool);
            return 0;
        }
    }

    vlimit_debug_log_buf = apr_psprintf(r->pool, "Not Match: access_name=(%s)"
        , header_name
    );
    VLIMIT_DEBUG_SYSLOG("check_virtualhost_name: ", vlimit_debug_log_buf, r->pool);

    return 1;
}

続きを読む