ENTRANCE|INFORMATION | DIARY | LABORATORY | LINK
CAGE(一般掲示板)|Developper's Nest(開発掲示板)|こころ宙
Apache は、オープンソースで開発されている HTTP サーバです。Apache2 には
HTTP 以外のプロトコルをサポートする布石もなされているようで、これからの発展が期待されます。
かなり古くから使われており、世界のほとんどの WWW サーバではこの Apache
が使われています。また、オープンソース開発で成功したソフトウェアとしても有名になっています。
ここでは、わたしが Apache を使っているなかで遭遇した出来事について書いていきます。
Apache で WWW サーバを立ち上げた後、ブラウザ (Internet Explorer など)
で日本語のページを読みに行くと、ページが文字化けしてしまうことがあります。この文字化けはブラウザ側の「エンコード」を「自動設定」などにすると直るのですが、毎回その作業を見に来た人にやってもらうのも困りものです。
この現象は、HTTP ヘッダに文字のエンコードが指定されていないために発生します。そこで、この問題を根本的に解決するには、ヘッダにエンコード情報を含めるようにしてあげればいいわけです。方法としてはページの <HEAD>
内の <META>
タグで指定するというものもありますが、これは認識しないブラウザもあるので (Internet Explorer など) やはり Apache の方で対処する方がいいようです。
まず、送信されるデフォルトコードを省略してしまうという方法があります。エンコードを自動認識できるブラウザであれば、ブラウザ側が勝手にエンコードを推定してくれます。
この方法を実現するには、httpd.conf
内の AddDefaultCharset
の行をコメントアウトします。
# AddDefaultCharset ISO-8859-1
しかし、この方法では、エンコードを自動認識できないブラウザ (今どき見かけないけど)
だとうまくいきませんし、ブラウザが誤ってしまう場合もありますし、何となく気持ちが悪いものです。そこで次の方法として、ファイルの拡張子を変更して対処するという方法があります。
Apache の設定を見ていくと、次のように書かれた場所があります。
AddCharset EUC-JP .euc-jp AddCharset shift_jis .sjis
これらの行は、拡張子が .euc-jp
であればエンコードとして EUC が使われている、.sjis
であればシフト JIS が使われていると指定するためのものです。つまり、たとえばクライアントから
index.html.sjis
というファイルの読み込みが発生した場合、そのエンコードをシフト JIS として送信することになります。
index.html
を日本語で記述する場合は refresh
などの自動読み込み機能を使い、index.html.sjis
へジャンプさせるようにするのがいいでしょう。
それもイヤだ! というのならば、強制的に「このディレクトリにあるファイルはすべてこのエンコードであるということにするんじゃー!」と指定する方法があります。あ、すべてのファイルはこのエンコード、というように指定するのならば、上記の AddDefaultCharset
を shift_jis
などに設定すればいいと思います。
まずは .htaccess
というファイルをディレクトリに作成します。そして、そのファイルにこの行を加えます。
AddType "text/html; charset=euc-jp" html
.htaccess
を読み込むようになっていれば、これで文字化けは解決するはずです。
「ストリーミング」というものを御存知でしょうか。ネットワーク上のサーバから、順次、データが配信されてくるというものです。動画でいえば、RealMedia
や WindowsMedia などですね。
これから紹介する「あるソフトウェア」を組み込むことで、簡単に、Apache
を MP3 の配信サーバにすることができるようになります。たとえば、家の中で音楽ファイルを集中管理したり、仕事先などから
(笑) 自分の好きな曲を聴いたり、ということができるのです。
お約束ですが、著作権には気をつけてくださいね。詳しくは書きませんが、その辺りは十分に了解している、ということを前提にして、話を進めます。なお、誰かがこの文章を読んで音楽ファイルなどを一般に公開してしまい、アーティストなどが損害を受けても、わたしは一切の責任を負いかねます。お願いだから、悪いことには使わないでくださいね。
Apache を MP3 ストリーミングサーバにするためのソフトが「mod_mp3」です。対応プラットフォームは書いてありませんが、基本はファイル処理だけですから、Apache
が動作する環境であれば、どこでも使用できると思います。ちなみに、バイナリ配布は行われていないようなので、コンパイラのない
Windows 環境では使用できないと思われます。Cygwin を導入するなりしてください。
これを書いている時点 (2002/11/20) の最新バージョンは 0.39 です。まずは上記サイトから、最新バージョンの
tar ball を持ってきましょう。RPM 版もありますが、ここではコンパイルから行うことにします。RPM
版だと、どこに展開されるかもわかりませんし…。
さて、ここで気をつけなければならないことがあります。
mod_mp3 を簡単に導入するためには、Apache が DSO (Dynamic Shared Object)
をサポートしている必要があります。Vine Linux などに含まれている Apache
や、最近 (1.3.2x など?) のものであれば、標準でサポートしていると思われますけれども。って、それ以前に、古いバージョンの
Apache を使っている方々は、セキュリティ的にまずいので、すぐにアップデートした方がいいです。
DSO をサポートしているか、していないかは、次の方法によって確かめられます。
$ httpd -l Compiled-in modules: http_core.c mod_so.c ...
この「Compiled-in modules」に mod_so.c が含まれていない場合、DSO のサポート機能が除かれています。その場合、Apache をコンパイルし直して DSO をサポートするようにするか、mod_mp3 も一緒にコンパイルして組み込むという方法があります。それらについては、ここでは省略します。
ようやく本題に戻ります。mod_mp3 を適当なディレクトリに展開し、make します。インストールは root で行った方が良いでしょう。
$ cd /usr/local/src $ tar xzvf mod_mp3-0.39.tar.gz $ cd mod_mp3-0.39 $ ./configure ... $ make ... $ su # make install
コンパイルはすぐに終了します。
問題が発生するとすれば、「必要なファイルが見つからない」という事だと思います。それ以外のエラーがありましたら、お知らせ下さい
(解決できるかどうかは別ですが(笑))。
次は Apache の設定ファイルを書き換えます。
make install をした時点で、ある程度、httpd.conf が書き換えられています。しかし、Vine
Linux 2.6 で行った場合、その書き換えられた内容に誤りがありました。Apache
を再起動する前に、一度、それらを確認しておいた方がいいでしょう。
まず、httpd.conf が置かれているディレクトリに行きます。ちなみに、以下の例は
Vine Linux 2.6 の場合です。それ以外の場合は、ディレクトリなどを適宜、読みかえてください。
# cd /etc/httpd/conf # vi httpd.conf
まず、mod_mp3 という単語を検索してください。次のような行が見つかるはずです。無かった場合は、以下に示す宣言行を書き加えれば
OK です。
(??? の部分は状況によって変わります)
LoadModule mp3_module ???/mod_mp3.so
この行を、ほかの LoadModule 付近に移動します。すると、他のモジュールとディレクトリが異なっている場合があります。この場合、Apache 再起動時に失敗しますので、他の LoadModule 行と見比べながら、以下のように適切なディレクトリを指定します。
LoadModule mp3_module module/mod_mp3.so
もうひとつ、mod_mp3 という単語で検索が引っかかるはずです。
AddModule mod_mp3.c
これも、他の AddModule 付近に移動しておきます。
それが終わったら、モジュール宣言の行よりも後に、次の行を加えます。ただし、MP3
に関する情報を他のファイルに分けたくない、httpd.conf ひとつにしておきたい、という場合は、mp3.conf
というファイルが httpd.conf と同じディレクトリにあるはずですから、その内容を
httpd.conf に移しておいてください。
Include /etc/httpd/conf/mp3.conf
これでひとまずの準備は完了です。
次は、どこでファイルを公開するのか、という情報を書いていきます。
公開する MP3 は、設定ファイルに自分で記入していかなければなりません。
インストールした時にコピーされた mp3.conf には、サンプルとして、次のような内容の宣言が書き込まれていると思います。
# $Id: mp3.conf,v 1.6 2002/07/04 17:14:25 brian Exp $ <IfModule mod_mp3.c> Listen 80 Listen 8000 <VirtualHost _default_:8000> ServerName testing.example.com MP3Engine On MP3CastName "mod_mp3" MP3Genre "Sounds of Open Source" MP3 /export/mp3 Timeout 1200 # If you want to announce yourself, enable this #MP3DirectoryServer http://yp.modmp3.net/ </VirtualHost> # Allow server status reports, with the URL of http://servername/server-status # Change the ".your_domain.com" to match your domain to enable. # #<Location /mp3-status> # SetHandler mp3-status # Order deny,allow # Deny from all # Allow from .your_domain.com #</Location> </IfModule>
このサンプルでは、VirtualHost 機能を使い、別の WWW サーバが立ち上がっているかのように振る舞わせています。ディレクトリにも割り当てられるのですが、とりあえず今は VirtualHost で解説します。
VirtualHost の名前に _default_ が使われていますが、これは特別扱いの名前です。他の
VirtualHost 宣言で引っかからなかった場合にヒットする名前のようです。まあ、この辺りはデフォルトでもいいでしょう。
重要なのは MP3 ディレクティブです。
ここに、公開する MP3 ファイルを書いていきます。複数ある場合は、MP3 ディレクティブを次々と書いていきます。ファイル名の代わりに、ディレクトリ名を書くこともできます。その場合、そのディレクトリ以下から再帰的に
MP3 ファイルが検索されます。
なお、ディレクトリのアクセス権限などには気をつけてください。わたしは、データが置かれているディレクトリツリーのルートで、アクセス権限から
x ビットを取り去っていて、どうにも再生できないという状況を作り出してしまっていました(笑)。読み込みができれば問題ありません。
ということで、簡単なサンプルは次のようになります。
<IfModule mod_mp3.c> Listen 6000 <VirtualHost 192.168.1.1:6000> MP3Engine On MP3CastName "SAMPLE" MP3 /tmp/bmIIDX7th/disk1/bmIIDX7th-1_01.mp3 MP3 /tmp/bmIIDX6th </VirtualHost> </IfModule>
ファイアウォールの外部からアクセスする場合、設定ファイルで指定したポート (この例では 6000) を解放しておくのを忘れないでください。ここをフィルタリングしてしまうと、データを取ってこられません。
設定ファイルを書き、MP3 ファイルが用意できたら、Apache を再起動しましょう。方法は各 OS によって異なります。たとえば、VineLinux では次のようにします。
/etc/init.d/httpd restart
上の例の動作確認は、URL「http://192.168.1.1:8000/?op=select」にアクセスすることで行うことができます。うまくいけば、MP3 ファイルが列挙されたテーブルと、ダウンロード用のボタンが表示されるはずです。Windows で winamp を使っているのであれば、M3U 形式でプレイリストをダウンロードして開けば (その場で開いても OK です) いくつかのデータが列挙されます。再生して、ちゃんと音が鳴れば成功です。鳴らなければ、どこかでエラーが発生しているかもしれません。エラーログを調べてみましょう。
ENTRANCE|INFORMATION | DIARY | LABORATORY | LINK
CAGE(一般掲示板)|Developper's Nest(開発掲示板)|こころ宙