kopug memo

名古屋で働くとあるWebエンジニアの覚書。

mod_perlでApacheを拡張

あるディレクトリ配下にアクセスするのは「ほにゃらら制限」を設けたい。しかしApacheの設定だけではできんよ。
と言った場合、こんな感じでできるっぽい。

httpd.conf

  <Location />
      PerlAccessHandler MyApache2::BlockByIP
  </Location>
  package MyApache2::BlockByIP;
  
  use strict;
  use warnings;
  
  use Apache2::RequestRec ();
  use Apache2::Connection ();
  
  use Apache2::Const -compile => qw(FORBIDDEN OK);
  
  my %bad_ips = map {$_ => 1} qw(127.0.0.1 10.0.0.4);
  
  sub handler {
      my $r = shift;
  
      return exists $bad_ips{$r->connection->remote_ip}
          ? Apache2::Const::FORBIDDEN
          : Apache2::Const::OK;
  }
  
  1;

これくらいの制限ならmod_perlで書く必要はないけど、色々使えそう。