簡易 HTTP Server (xinetd 編)

簡易 HTTP Server を gawk の機能で作成してみましたが、今度は xinetd スーパーサーバーによる HTTP Server を作成してみます。 最近は inetd から xinetd にスーパーサーバーが置き換えられると同時に、あまりスーパーサーバーを用いた daemon も見かけなくなってしまったのですが、スーパーサーバーを用いることにより標準入出力をそのまま用いて daemon が記述できます。 つまり、nawk でも動作するということです。

コードは以下のとおりです。 getline で標準入力から受け取り、標準出力に出すという極めてシンプルなものです。 なお、getline で取得した $0 のうち $2 に出力するべき HTML も受け取ることができます。

#! /usr/bin/gawk -f
# simple_httpd_xinetd.awk

BEGIN {
    RS = ORS = "\r\n";

    getline;

    print "HTTP/1.x 200 OK";
    print "Content-type: text/html";
    print "";
    print "<h1>Hello, world!</h1>";
}

さて、これを動作させるのは少し面倒です。 Fedora などで例を挙げると、/etc/xinetd.d 以下に以下のようなファイルを作成します。

service webcache
{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /path/to/simple_httpd_xinetd.awk
        log_on_failure  += USERID
}

サービス名が webcache になっているのは 8080 を用いるためです。 また、パスは適宜変更してください。

実行するには xinetd を再起動させます。

# /etc/rc.d/init.d/xinetd restart

もちろん root 権限が必要ですが、xinetd を介する方が gawk の機能を用いるよりも安定しています。

DoukakuAWK_065.png

httpd in awk のものも inetd を介します。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png