2013-10-04 82 views
0

編輯該問題。我有這個簡單的普拉克app.psgi將Plack應用程序與反向代理一起使用 - Plack :: Middleware :: Debug

my $app = sub { 
    my $env = shift; 
    return [ 
     200, 
     ['Content-Type' => 'text/html'], 
     [ "<html><head><title>x</title></head><body><pre>Path info: $env->{PATH_INFO}</pre></body></html>"], 
    ]; 
}; 

use Plack::Builder; 
builder { 
    enable 'Debug'; 
    $app; 
}; 

用一個簡單的plackup運行它。

當從本地機器訪問:http://localhost:5000/some/path時,它打印: Path info: /some/path並得到了一個很好的工作Plack調試面板。

現在,我有apache:80配置如下:

ProxyPass  /myapp/ http://127.0.0.1:5000/ 
ProxyPassReverse /myapp/ http://127.0.0.1:5000/ 

那麼,隨之而來的所有請求:http://SITE/myapp/被代理上述普拉克應用。因此,通過

http://SITE/myapp/some/path 

試圖訪問它時,瀏覽器再次,正確打印:

Path info: /some/path 

但「普拉克::中間件/調試」不工作,因爲他將在未來瀏覽器的網址:

jquery.js -> /debug_toolbar/jquery.js 
toolbar.min.js -> /debug_toolbar/toolbar.min.js 

當然,theyre不存在。 (他們應該/myapp/debug_toolbar/....

所以,問題是:

  • 什麼,我需要做的事情 - 如何改變上述app.psgi得到一個工作程序?
  • 我需要somewhat改變所有傳出的網址前綴/myapp/
+0

一個簡短的瀏覽,我發現的東西在這裏:'Plack-Middleware-Debug-0.16/lib/Plack/Middleware/Debug.pm' ... var jquery_url ='<%= $stash-> {BASE_URL}%>/debug_toolbar/jquery.js'...你嘗試在這裏修改路徑? –

+0

編輯的問題更容易理解 - 至少我希望... – jm666

回答

3

更新:我想你需要的是添加以下

enable "ReverseProxy";  ## Plack::Middleware::ReverseProxy 
enable "ReverseProxyPath"; ## Plack::Middleware::ReverseProxyPath 

更新:您可能還需要編輯你的apache httpd conf以添加nocanon到proxypass ...

below * * **原裝響應

它不是硬編碼,看到自己(我不得不

https://github.com/plack/Plack/wiki/How-to-detect-reverse-proxy-and-SSL-frontend http://p3rl.org/Plack::Middleware::ReverseProxy http://advent.plackperl.org/2009/12/day-12-maps-multiple-apps-with-mount-and-urlmap.html

#!/usr/bin/perl -- 
#~ plack-debug-mounted.pl 
#~ 2013-10-17-02:59:26 
#~ 
## perltidy -olq -csc -csci=10 -cscl="sub : BEGIN END if " -otr -opr -ce -nibc -i=4 -pt=0 "-nsak=*" 
#!/usr/bin/perl -- 
use CGI(); 
use Data::Dump qw/ dd pp /; 
use Path::Tiny qw/ path /; 
use Plack::Builder; 
use Plack::Runner; 

my $selfsourceapp = sub { 
    return [ 
     '200', 
     [ 'Content-Type' => 'text/plain', ], 
     [ path(__FILE__)->slurp_raw ], 
    ]; 
}; 
my $dumperapp = sub { 
    my $q = CGI->new($_[0]); 
    return [ 
     '200', [ 
      'Content-Type' => 'text/html', 
      'Content-Length' => '2', 
     ], [ 
      $q->start_html(-title => 'dumpenv.psgi'), 
      $q->h1($_[0]->{SCRIPT_NAME}), 
      $q->Dump, $q->end_html, 
     ], 
    ]; 
}; 

my $indexapp = sub { 
    return [ 
     '200', 
     [ 'Content-Type' => 'text/html', ], 
     [ 
      q{<doctype html> 
<html lang="en-US" charset="UTF-8"> 
<title> Plack perlology </title> 
<body> 
<p> A Plack::Middleware::Debug free zone 
<br> <a href="/"> this </a> 
<br> <a href="/dumpenv"> dupenv </a> 
<br> <a href="/selfsrc"> selfsrc </a> 
<p> Get <c>Plack::Middleware::Debug</c> <b> ed </b> 
<br> <a href="/debugged/"> /debugged/ this </a> 
<br> <a href="/debugged/dumpenv"> /debugged/dupenv </a> 
<br> <a href="/debugged/selfsrc"> /debugged/selfsrc </a> 
<p> Come get some 
<br> <a href="/debugged/debug_toolbar/toolbar.min.css"> 
/debugged/debug_toolbar/toolbar.min.css 
</a> 
<br> <a href="/debugged/debug_toolbar/toolbar.min.js"> 
/debugged/debug_toolbar/toolbar.min.js 
</a> 
<p> Cant get this 
<br> <a href="/debug_toolbar/toolbar.min.css"> 
/debug_toolbar/toolbar.min.css 
</a> 
<br> <a href="/toolbar.min.css"> 
/toolbar.min.css 
</a> 

</body><!-- before this Plack::Middleware::Debug inserts, viewsource!! --> 
} 
     ], 
    ]; 
}; 

my $finalapp = builder { 
    mount '/debugged' => builder { 
     enable 'Debug', panels => [ 
      qw/ 
       Timer 
       Response 
       Environment 
       Session 
       Parameters 
      /
     ]; 
     mount "/dumpenv" => $dumperapp; 
     mount "/selfsrc" => $selfsourceapp; 
     mount "/"  => $indexapp; 
    }; 

    mount "/dumpenv" => $dumperapp; 
    mount "/selfsrc" => $selfsourceapp; 
    mount "/"  => $indexapp; 
}; 

my $runner = Plack::Runner->new; 
$runner->parse_options(qw' --host 127.0.0.1 --port 80 '); 
$runner->run($finalapp); 
+0

我編輯了我的問題。你能幫我在'app.pasi'中改變以獲得一個可用的應用程序嗎? – jm666

+0

我已更新;)嘗試啓用ReverseProxyPath ReverseProxy並查看它是否有效 – optional

+0

它的工作原理 - 接受。但是仍然在尋找「如何在逆向代理背後編寫_optimal_ Plack應用程序」的「良好指南」:) – jm666

相關問題