読者です 読者をやめる 読者になる 読者になる

kopug memo

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

Reverse Proxyの後ろにCatalystアプリを置いてみた

Perl

前回PODだけ貼り付け、検証すると言ったので検証した。
http://d.hatena.ne.jp/kopug/20061201

構成

            ( Rooter )
                 |
         [Apache2.0 mod_proxy]
                 |
     [Apache2.0 mod_perl Catalyst ]

Frontendのhttpd.conf

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/foo/html
    ServerName www.example.com
    ErrorLog logs/error_log
    CustomLog logs/access_log common

    RewriteEngine On
    RewriteRule ^/css|img|js/ - [L]
    RewriteRule ^/(.*)$ http://backend.example.lan/$1 [P,L]
</VirtualHost>

Catalyst Application の conf

---
name: MyApp
using_frontend_proxy: 1

テストコード
Root.pm

sub proxytest : Local {
    my ($self, $c ) @_;

    $c->log->debug("Remote Address : " . $c->req->address );
    $c->log->debug("Base   Host    : " . $c->base );
    # * 要 C::P::Dumper
    $c->log->dumper( \%ENV );
}

こんな感じで適当に動かしてみる。
これで気がついたのは、Catalystを付属のserver.pl で動かした場合、
using_frontend_proxy: 1 とか無くても 環境変数に HTTP_X_FORWARDED がある場合、
それが使われていたけれども、mod_perlで動かした場合は、
デフォルトだと HTTP_HOST と REMOTE_ADDR を見てる感じ。