Amon2をCGIで動かす

何気にアクセス解析を確認してると「Amon2 cgi」というキーワードで当サイトに訪問されてる方がいるようで、そいえばPSGI対応WAF(今回の場合Amon2)をCGIで動かすにはどうすれば良いのだろう?と興味を持ったので調べてみました。

#!/usr/bin/perl

use strict;
use warnings;
use Plack::Loader;

my $app = Plack::Util::load_psgi('/home/someone/MyApp/app.psgi');
Plack::Loader->auto->run($app);
1;

これをとりあえず app.cgi としてCGI実行可能なディレクトリに保存して(もちろんCGIなのでパーミッションも0755とか0705とか実行可能な設定で)、ブラウザからアクセスするとCGIがPSGIを経由してAmon2のapp.psgiを呼び出して実行してくれます。

例えば、

  • サーバはlocalhost
  • /home/someone直下に amon2-setup.pl MyApp でプロジェクト作成
  • app.cgiは/home/someone/public_htmlに設置

というケースで、http://localhost/~someone/app.cgi にアクセスするとAmon2が生成する File Not Found ページが表示されます。あれ?(笑)

これはMyApp::Web::Dispatcherを確認してみると気づくのですが、トップのサンプルページはプロジェクトを作成した直後でMyApp::Web::Dispatcherに手を付けていない状態だと、

any '/' => sub {
    my ($c) = @_;
    return $c->render('index.tt');
};

ということになってて、最後に / が必要です。これでめでたく plackup app.psgi を稼働させて http://localhost:5000/ へアクセスした場合と同じサンプルページが表示できます。

参考URL