3

我正在Heroku上运行一个symfony2应用程序,我需要获取我的应用程序将在其后面运行的受信任代理 (IP(s)),如下所述:http: //symfony.com/blog/new- in-symfony-2-3-use-sub-networks-to-configure-trusted-proxies

有一个关于 Dyno 可以在Dyno 流形中获得的 IP 的提及:

运行多个测功机时,测功机管理器将应用程序分布在多个节点上。访问您的应用程序始终通过路由器。

因此,测功机没有静态 IP 地址。虽然您永远无法直接连接到测功机,但可以从测功机发起传出请求。但是,您可以指望测功机的 IP 地址会随着它在不同位置重新启动而发生变化。

该框架实际上有一些选项,例如:

framework:
    trust_proxy_headers: true

但这很快就会被弃用......

谢谢 !:)

4

3 回答 3

4

您可能只需在前端控制器中添加一个信任传入 IP 的调用(因为访问您的服务器的唯一方法是通过 Heroku 路由层):

Request::setTrustedProxies(array($_SERVER['REMOTE_ADDR']));
于 2013-04-23T23:39:33.817 回答
0

根据Symfony 的 Heroku 指令Heroku 标头列表,我们可以看到 Symfony 使用并且可以从 Heroku 信任的唯一转发标头是X-Forwarded-For,X-Forwarded-ProtoX-Forwarded-Port. 其他标头不可信。

我会推荐以下内容:

$trustedHeaders = [
    Request::HEADER_X_FORWARDED_FOR,
    Request::HEADER_X_FORWARDED_PROTO,
    Request::HEADER_X_FORWARDED_PORT,
];
Request::setTrustedProxies(
    array($_SERVER['REMOTE_ADDR']),
    array_reduce($trustedHeaders, function($carry, $value) {
        return $carry ^ $value;
    }, 0)
);
于 2018-04-04T19:07:25.033 回答
-2

嗯,在 Heroku 上,在 dynos 上运行的应用程序只能通过路由层/代理访问,所以你应该可以信任一切。此外,代理请求到您的应用程序的路由器的 IP 是未知的。

Request::setTrustedProxies(array('0.0.0.0/0'));
于 2013-04-23T23:43:15.597 回答