iRSSの日記

はてなダイアリーiRSSの日記の続き

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>