【发布时间】:2015-10-30 03:18:58
【问题描述】:
我需要在 Apache 反向代理后面放置一个 Mojolicious 应用程序。在代理后面时,我无法让 Mojolicious 生成有效的 URL。
我正在使用 Mojolicious 6.14 和 Perl 5.18.1。
这是我根据https://github.com/kraih/mojo/wiki/Apache-deployment(在路径部分)设置的 Apache 反向代理配置。
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /app1 http://localhost:3000/ keepalive=On
ProxyPassReverse /app1 http://localhost:3000/
RequestHeader set X-Forwarded-HTTPS "0"
这是我的测试用例。
use 5.014;
use Mojolicious::Lite;
app->hook('before_dispatch' => sub {
my $self = shift;
if ($self->req->headers->header('X-Forwarded-Host')) {
#Proxy Path setting
my $path = shift @{$self->req->url->path->parts};
push @{$self->req->url->base->path->parts}, $path;
}
});
any '/' => sub {
my $c = shift;
$c->render('index');
};
any '/test' => sub {
my $c = shift;
$c->render('test');
};
app->start;
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>
<head><title>Index Page</title></head>
<body>
<p>Index page</p>
<p>
%= link_to 'Go to Test Page' => '/test'
</p>
</body>
</html>
@@ test.html.ep
<!DOCTYPE html>
<html>
<head><title>Test Page</title></head>
<body>
<p>Test page</p>
<p>
%= link_to 'Return to home page' => '/'
</p>
</body>
</html>
访问http://www.example.com/app1可以看到索引页面,但是测试页面的链接不正确。链接是//test,而我预计它是http://www.example.com/app1/test。
这是测试用例的 HTML 输出。
<!DOCTYPE html>
<html>
<head><title>Index Page</title></head>
<body>
<p>Index page</p>
<p>
<a href="//test">Go to Test Page</a>
</p>
</body>
</html>
我如何告诉 Mojolicious 我的应用的基本 URL 是什么,以便它生成正确的链接?
【问题讨论】:
-
我相信这里已经回答了; stackoverflow.com/questions/23571608/…
标签: perl mojolicious