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サーバとして使うには楽で良さそうなので使ってみようかなぁ。