Linuxコマンドを1つのプログラムに詰め込んだ BusyBoxというツールがあります。
このbusyboxは busybox httpd で実行するだけで、WEBサーバーを動かすことができます。
ここでは、BusyBox の Linux版について説明します。
とにかく早く動かしたい場合
rootユーザで以下を実行すると、busybox が存在するディレクトリ以下をWEB公開できます。
(ファイアウォールで80番ポートを許可しておいてください)
終了する場合は、CTRL-C を押してください。
busybox httpd -f
待ち受けポート番号を1024以上にする場合は、一般ユーザーでも実行できます。
-p でポート番号を指定します。
ファイアウォールで、指定したポートへの接続を許可しておいてください。
busybox httpd -f -p 30000
CGIも動作できます。
busybox が存在するディレクトリ下に cgi-bin を作成し、そこに実行可能なスクリプトを置くとCGIとして動作します。
デフォルトの動作
busybox をWEBサーバーとして動作させるには、次のように実行します。
これに加えてオプションや設定ファイルで動作を指定できます。
busybox httpd
特に指定しない場合のデフォルトの動作は次のようになります。
- ホームディレクトリ(ドキュメントルート)
busybox のあるディレクトリ - CGIディレクトリ
ホームディレクトリ(ドキュメントルート)下の cgi-binディレクトリ - ポート番号
80番 - アクセス制限
なし(全てのアクセス元を許可) - 設定ファイル
httpd.conf が存在する場合は、その内容。詳細は後述の「設定ファイルによる設定」を参照。 - 動作
バックグラウンドプロセスとして動作
コマンドラインオプション
busybox httpd に続けて、次のオプションを指定できます。
-f
デーモンとして動作しません。-fオプションを付けない場合は、デーモンとして動作します。
-c 設定ファイルのパス
設定ファイルを指定します。詳細は後述の「設定ファイルによる設定」を参照。
-p [IPアドレス:]ポート番号
接続を待つIPアドレス、ポート番号を指定します。IPアドレスは省略可能です。
ポート番号に1023番以下を指定したい場合は、busyboxをrootで実行する必要があります。
-u ユーザー[:グループ]
指定したユーザー(とグループ)で動作します
-h HOME
WEB公開するホームディレクトリ(ドキュメントルート)を指定します。このオプションが指定されない場合は、busybox が存在するディレクトリがホームディレクトリ(ドキュメントルート)になります。
-r レルム名
busybox httpd で、このレルム名を指定する必要性がよくわかりませんでした。
以前のブラウザでは、BASIC認証時にこのレルム名がユーザ名・パスワード入力を求めるダイアログで表示されていましたが、最近のブラウザでは表示がされず、そのために指定する必要性はありません。
また、Apacheのbasic認証とdigest認証 | パソコン鳥のブログ の「レルム名について」での説明のように、認証にレルム名が使用されますが、busybox httpd ではディレクトリ毎にレルム名の指定ができないので、このような用途としてもレルム名を指定する必要性がありません。
-i
inetdを使用している場合は、このオプションを指定しますが、わたしの方では動作は未検証です。
-m STRING
このオプションはWEBサーバーとしての動作に関係はありません。
指定された文字列を、MD5ハッシュ化して表示して、busybox httpd はすぐ終了します。WEBサーバーとして動作することはありません。
以降で記載の「ユーザー名とパスワードでアクセス制限」の箇所で、ユーザーのパスワードをMD5ハッシュで記述する場合に、ここでの表示内容を使用できます。
-e STRING
-d STRING
これらのオプションはWEBサーバーとしての動作に関係はありません。
それぞれ指定された文字列を、HTMLエンコード/URLでコードを表示します。
表示後、busybox httpd はすぐ終了します。WEBサーバーとして動作することはありません。
設定ファイルによる設定
以降の内容を設定ファイルに記述することで、WEBサーバーの動作を指定できます。
設定ファイルとして httpd.conf、または busybox httpd で -cオプションで指定したファイルが使用されます。
httpd.conf は、ホームディレクトリ(ドキュメントルート)下のサブディレクトリ下にも置くことができます。設定内容は、httpd.conf が置かれたディレクトリ(とそのサブディレクトリ以下)で有効です。
上位ディレクトリにhttpd.confが存在したり -cオプションで指定されている場合は、それらの設定に追加される形で、下位のサブディレクトリのhttpd.conf の設定内容が追加されます。
IPアドレスでアクセス制限
許可
A: に続けて、アクセス許可するIPアドレスを CIDR表記で指定します。
A:172.20.
A:10.0.0.0/25
A:10.0.0.0/255.255.255.128
A:127.0.0.1
すべてのアクセス元を許可するには、次のようにします。
ただし、後述の「許可と拒否のルール」での説明通り、デフォルトは全てのアクセスは許可で、許可と拒否のルールでは拒否のルールが優先されるため、下記を記述する意味はありません。
A:*
拒否
D: に続けて、アクセス拒否するIPアドレスを CIDR表記で指定します。
D:192.169.
D:192.168.33.128/25
D:192.168.48.0/255.255.255.128
D:10.8.4.56
すべてのアクセス元を拒否するには、次のようにします。
ただし、後述の「許可と拒否のルール」での説明通り、許可と拒否のルールでは拒否のルールが優先されるため、下記を記述するとどこからもアクセスできなくなります。
D:*
許可と拒否のルール
デフォルトでは、すべてのアクセスを許可しています。
許可と拒否の記述を混ぜて記述できます。許可と拒否のルールが衝突した場合は、拒否のルールが優先されます。
ユーザー名とパスワードでアクセス制限
ユーザー名・パスワードで制限
次の書式で記述します。
指定されたディレクトリに対して、指定されたユーザー名・パスワードで認証します。
パスワードは、そのまま記述するか、MD5ハッシュ化されたものを記述します。
なお、ディレクトリについては、以降の「ディレクトリ」の箇所も参照してください。
ディレクトリ名:ユーザー名:パスワード
例えば、次のようにすると、URLのディレクトリ部が /test の場合に、BASIC認証が要求され、ユーザ名 user、パスワードに passwd を指定すると、ページにアクセスできます。
/test:user:passwd
なお、上記例で URLのディレクトリ部が /test2 で始まる場合は、対象では無いことに注意してください。
/etc/passwd 内のユーザー名・パスワードで制限
/etc/passwd に記述されたユーザー・パスワードで認証するには、ユーザー名やパスワードの箇所を * にします。
ただし、rootユーザーで busybox を起動している必要があります。
ディレクトリ名:ユーザー名:*
ディレクトリ名:*:*
ディレクトリ
ユーザー名とパスワードでアクセス制限する際に記述するディレクトリは、httpd.conf が存在する場所を基準にします。
例えば、ホームディレクトリ(ドキュメントルート)が /home/user/web の場合に、/home/user/web/httpd.conf に次のように記述すると、これは URL のディレクトリ部が / で始まる場合(http://xxxxxx/ のような場合)に適用されます。
/:test:passwd
URLのディレクトリ部が /subdirの場合(http://xxxxxx/subdir のような場合)の指定は、次の2つのパターンがあります。
1つ目は、/home/user/web/httpd.conf に記述する場合です。
/subdir:test:passwd
2つ目は、/home/user/web/subdir/httpd.conf に指定する場合です。
(この場合は、/home/user/web/httpd.conf に 先述の /subdir:test:passwd を記述しないようにしてください)
指定するディレクトリが、httpd.conf を置いた subdir を基準として単に / となっていることに注意してください。
/:test:passwd
ホームディレクトリ(ドキュメントルート)
次の書式で指定します。
busybox httpd で -hオプションで指定していた場合でも、ここでの指定の方が使用されます。
H:ディレクトリ
404エラーページ
次の書式で、404エラー時に表示するHTMLファイルを指定します。
この設定は、-c オプションで指定する設定ファイルでのみ有効なようです。
ホームディレクトリ(ドキュメントルート)以下に置いたhttpd.confでの指定では、config error となります。
E404:HTMLファイルのパス
デフォルトページ
ブラウザで指定するURLがディレクトリのみの場合に、表示されるようになっているページをデフォルトページといいます。デフォルトではindex.htmlを表示しようとします。
次の書式で、デフォルトページとするHTMLファイルを指定します。
I:HTMLファイルのパス
リバースプロキシ
次の書式で、リバースプロキシの動作を指定します。リダイレクト先URLに、httpsは指定できません。
この設定は、-c オプションで指定する設定ファイルでのみ有効なようです。
P:リクエストURL:リダイレクト先URL
たとえば、次のように設定すると、ブラウザで http://hoge/hage/index.html にアクセスすると、http://xxxxxxx/test/hage/index.html にリダイレクトされます。
P:/hoge:http://xxxxxxx/test
なお、busybox httpd 実行時に、「httpd: config error」でリバースプロキシの設定業が表示された場合は、その busybox のビルドではリバースプロキシの指定に対応していません。
MIMEタイプの指定
次のように、拡張子とMIMEタイプを指定できます。
.flac:audio/flac
デフォルトでは、次のものが定義されているようです。
.txt.h.c.cc.cpp:text/plain
.htm.html:text/html
.jpg.jpeg:image/jpeg
.gif image/gif
.png image/png
.css text/css
.wav audio/wav
.avi video/x-msvideo
.qt.mov video/quicktime
.mpe.mpeg:video/mpeg
.mid.midi:audio/midi
.mp3 audio/mpeg
CGI
ホームディレクトリ(ドキュメントルート)/cgi-bin ディレクトリ内の実行可能プログラムが CGIプログラムとして動作できます。
(http://xxxxxx/cgi-bin/test.pl のようにアクセスします)
または、httpd.conf 内で下記のように拡張子と実行パスを指定していた場合は、実行権がついていないものでも動作可能です。
*.sh:/bin/sh
CGIプログラムには、QUERY_STRINGやREMOTE_ADDRといった環境変数も渡ってきます。
参考
BusyBox – The Swiss Army Knife of Embedded Linux
[OpenWrt Wiki] BusyBox HTTP Daemon (httpd) webserver
httpd.c « networking – busybox – BusyBox: The Swiss Army Knife of Embedded Linux
コメント