0

質問を編集しました。私はこの単純な Plack を持っていますapp.psgi:

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/は、上記の Plack アプリにプロキシされます。したがって、経由でアクセスしようとすると

http://SITE/myapp/some/path

ブラウザは再び、正しく出力します:

Path info: /some/path

しかし、"Plack::Middleware/Debug" は機能しません。なぜなら、彼は次の URL をブラウザーに送信するからです。

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

もちろん、それらは存在しません。(彼らはする必要があります/myapp/debug_toolbar/....)

質問は次のとおりです。

  • 私がする必要があること - 上記の app.psgi を変更してアプリを動作させるにはどうすればよいですか?
  • somewhatすべての発信 URL をプレフィックス付きで変更する必要がある/myapp/
4

1 に答える 1

3

更新:必要なのは次を追加することだけだと思います

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

update : apache httpd conf を編集して nocanon を proxypass に追加する必要があるかもしれません...

以下**元の**応答です

ハードコーディングされていません。

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 );
于 2013-10-17T10:02:22.320 に答える