yunomuのブログ

趣味のこと

mighttpd2を使う

mighttpd2で遊んでみようと思う。
前に一度ビルドしてみようとして失敗したことがあったんですけど、なんとなくそれはそういうもんだというのがわかってきたので、それはそれで再挑戦してみよう。

ということで、とりあえず

% cabal instal mighttpd2

でいいんですけど、なんかまた依存ライブラリの関係で面倒くさいことになってきたので"rm -rf ~/.ghc"をやってやりました。そうするとスムーズにいきました。めでたしめでたし。

起動する

% mighty

とりあえずこれだけでも起動はするんですけど、メッセージも何も出ないので何が起きているのかよくわからない。一応この状態ではtcp/8080でHTTPサーバが動いています。

% curl http://localhost:8080/
Not Found

ちなみにこれ、127.0.0.1だとアクセスできません。

% curl http://127.0.0.1:8080/
Precondition Failed

デフォルトでApacheでいうところのListen localhost:8080って書いてある感じみたいです。

それはいいとして、

% mighty --help
Usage: mighty
       mighty config_file routing_file 

"config_file"と"routing_file"というのが要るみたいです。これらはgithubのmighttpd2のリポジトリにあるexample.confとexample.routeを参考にして作る。
example.conf

     1  # Example configuration for Mighttpd 2
     2  Port: 80
     3  Debug_Mode: Yes # Yes or No
     4  User: nobody
     5  Group: nobody
     6  Pid_File: /var/run/mighty.pid
     7  Logging: Yes # Yes or No
     8  Log_File: /var/log/mighty # The directory must be writable by User:
     9  Log_File_Size: 16777216 # bytes
    10  Log_Backup_Number: 10
    11  Index_File: index.html
    12  Index_Cgi: index.cgi
    13  Status_File_Dir: /usr/local/share/mighty/status
    14  Connection_Timeout: 30 # seconds
    15  # Server_Name: Mighttpd/2.x.y
    16  Worker_Processes: 1

Port, Pid_File, Log_File, Status_File_Dirあたりを適当に変えればあとはだいたいいいんじゃないでしょうか。
Debug_ModeをNoにするとdemonとして起動するようになります。Yesだとforegroundで動きながらログは標準出力に出る感じ。
ログというのはApache風にいうとaccess_logみたいです。

example.route

     1  # Example routing for Mighttpd 2
     2
     3  # Domain lists
     4  [localhost www.example.com]
     5
     6  # Entries are looked up in the specified order
     7  # All paths must end with "/"
     8
     9  # A path to CGI scripts should be specified with "=>"
    10  /~alice/cgi-bin/ => /home/alice/public_html/cgi-bin/
    11
    12  # A path to static files should be specified with "->"
    13  /~alice/         -> /home/alice/public_html/
    14  /cgi-bin/        => /export/cgi-bin/
    15
    16  # Reverse proxy rules should be specified with ">>"
    17  # /path >> host:port/path2
    18  # Either "host" or ":port" can be committed, but not both.
    19  /app/cal/        >> example.net/calendar/
    20  # Yesod app in the same server
    21  /app/wiki/       >> 127.0.0.1:3000/
    22
    23  /                -> /export/www/

3-4行目のDomain listsってのが、ApacheでいうところのListenのホスト部分のリストらしい。なんでもいいとかはできないんでしょうか。
パスの後ろにコンテンツのディレクトリのフルパスを書く感じで、"->"だとstaticなファイル、"=>"だとCGIとして実行、">>"だとリバースプロキシになるという感じ。
結構思い切った構成ですよね。

で、これ同じパスに複数のroutingが書けるのでリバースプロキシ使ってロードバランサにも使えるかなぁと思ったんですが、単に最初に書いたものが有効になるだけでした。まあよく考えたら振り分け考えないといけないしstickysessionとかも対応したくなる気がするし、そんなこんなで重たくなるのは本意じゃないかもしれない。

普通にWebサーバとして使うには楽で良さそうなので使ってみようかなぁ。