Plack::Middleware::ReverseProxyPathを使うと、uri_forにpathを補完してくれる
エンドポイントが http://hoge.com/mul/ で、starmanでリバースプロクシしているときuri_forは、そのままだと、ディレクトリ部分のpath(/mul/の部分)を補完してくれない。
app.psgiで enable 'Plack::Middleware::ReverseProxyPath'して、httpd.confでRequestHeader set "X-Forwarded-Script-Name"すればよい
httpd.confを変更
<Location /mul/> ProxyPass http://localhost:5000/ ProxyPassReverse http://localhost:5000/ RequestHeader set "X-Forwarded-Script-Name" /mul/ </Location>
app.psgiを変更
diff --git a/app.psgi b/app.psgi index e04d91d..0cc4696 100644 --- a/app.psgi +++ b/app.psgi @@ -25,6 +25,7 @@ builder { path => qr{^(?:/robots\.txt|/favicon\.ico)$}, root => File::Spec->catdir(dirname(__FILE__), 'static'); enable 'Plack::Middleware::ReverseProxy'; + enable 'Plack::Middleware::ReverseProxyPath'; enable 'Plack::Middleware::Session', store => Plack::Session::Store::DBI->new( get_dbh => sub { diff --git a/tmpl/index.tt b/tmpl/index.tt index 8eed0f6..f4dbdd4 100644
これで、OK
よくわからなかったので、uri_forの前に.をつけて、回避してたんだけど、danjouさん(http://search.cpan.org/~danjou/ )におしえてもらった、多謝
--- a/tmpl/index.tt +++ b/tmpl/index.tt @@ -17,9 +17,9 @@ <h4>全サービス分集計</h4> <table class="table table-bordered"> <tr><th>タイプ</th><th colspan="2">CSV</th></tr> - <tr><td>MAU</td><td><a href=".[% uri_for('/show/csv/mau') %]">表示</a><td><a href=".[% uri_for('/download/csv/mau') %]">ダウンロード</a></td></tr> - <tr><td>WAU</td><td><a href=".[% uri_for('/show/csv/wau') %]">表示</a><td><a href=".[% uri_for('/download/csv/wau') %]">ダウンロード</a></td></tr> - <tr><td>DAU</td><td><a href=".[% uri_for('/show/csv/dau') %]">表示</a><td><a href=".[% uri_for('/download/csv/dau') %]">ダウンロード</a></td></tr> + <tr><td>MAU</td><td><a href="[% uri_for('/show/csv/mau') %]">表示</a><td><a href="[% uri_for('/download/csv/mau') %]">ダウンロード</a></td></tr> + <tr><td>WAU</td><td><a href="[% uri_for('/show/csv/wau') %]">表示</a><td><a href="[% uri_for('/download/csv/wau') %]">ダウンロード</a></td></tr> + <tr><td>DAU</td><td><a href="[% uri_for('/show/csv/dau') %]">表示</a><td><a href="[% uri_for('/download/csv/dau') %]">ダウンロード</a></td></tr> </table> </div>