Apache 使用 HTTP::Server::PSGI 代理到 PSGI 应用程序。
Apache 配置文件:
<Proxy balancer://my_cluster>
BalancerMember http://127.0.0.1:3001
BalancerMember http://127.0.0.1:3002
BalancerMember http://127.0.0.1:3003
</Proxy>
ProxyPreserveHost On
ProxyPass /dispatch/ balancer://my_cluster/
该 URL 将是: http://foo.com/dispatch/main
调用 $self->query->self_url() 后我得到: http://foo.com/main
/dispatch 每次都会被切断。我不确定是哪一层将其切断或如何将其恢复。
答案1
首先我需要将 ProxyPreserveHost 设置为 Off(这是默认设置)
更改 PSGI 应用程序的入口点。
builder {
return $app;
}
变成:
builder {
mount "/dispatch" => $app
}
将 ProxyPass 更改为:
ProxyPass /dispatch/ balancer://my_cluster/dispatch/
现在 url_self() 可以按预期工作。