使用 Apache 负载平衡器和 PlackUp 时,self_url() 显示不正确的值

使用 Apache 负载平衡器和 PlackUp 时,self_url() 显示不正确的值

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() 可以按预期工作。

相关内容