如何在Laravel 5.6上为Heroku配置可信代理中间件

时间:2018-03-13 18:02:43

标签: laravel heroku

Heroku在使用Laravel时具有以下用于配置受信任代理的文档:

https://devcenter.heroku.com/articles/getting-started-with-laravel#trusting-the-load-balancer

它说:

  

同样非常重要的是要阻止Laravel信任   转发和X-Forwarded-Host标头,因为Heroku的路由器   没有设置,但Symfony的Request组件信任它们   设置可信代理后的框。

     

最终配置文件应如下所示:

localvm

Laravel拥有自己的文档,介绍如何配置可信代理:

https://laravel.com/docs/5.6/requests#configuring-trusted-proxies

我很困惑,因为你可以在这里的Laravel文档的例子中看到:

<?php
return [
    'proxies' => '*',
    'headers' => [
        Illuminate\Http\Request::HEADER_FORWARDED    => null, // not set on AWS or Heroku
        Illuminate\Http\Request::HEADER_CLIENT_IP    => 'X_FORWARDED_FOR',
        Illuminate\Http\Request::HEADER_CLIENT_HOST  => null, // not set on AWS or Heroku
        Illuminate\Http\Request::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
        Illuminate\Http\Request::HEADER_CLIENT_PORT  => 'X_FORWARDED_PORT',
    ]
];

<?php namespace App\Http\Middleware; use Illuminate\Http\Request; use Fideloper\Proxy\TrustProxies as Middleware; class TrustProxies extends Middleware { /** * The trusted proxies for this application. * * @var array */ protected $proxies = [ '192.168.1.1', '192.168.1.2', ]; /** * The headers that should be used to detect proxies. * * @var string */ protected $headers = Request::HEADER_X_FORWARDED_ALL; } 属性是字符串,而不是数组。我希望看到一个数组,我可以像Heroku文档那样添加标题映射,但是我不知道如何使用$headers字符串属性来执行此操作。

为Heroku设置此中间件的适当方法是什么,以便我仍然可以“阻止Laravel像Heroku推荐的那样信任$headersForwarded标头”?

2 个答案:

答案 0 :(得分:0)

首先,一些背景知识。你可能知道这第一部分。

Heroku文档仍然指的是TrustedProxy尚未被带入laravel核心本身的时间,这发生在5.5。从5.5开始,我们通过Laravel中包含的中间件进行这些设置,而不是像我们在5.5之前那样从可信代理发布配置文件(顺便提一下,你可以在安装后仍然使用该软件包 - 但如果你这样做,则不应该这样做)重新开始5.5+文档最初让我困惑。)我想你已经完成了所有这些。

关于你问题的主要内容。

我自己运行5.5 LTS(在Heroku上)所以我没有这个确切的问题 - 在5.5上,$headers属性仍然是一个看到here的数组。

在5.6中,symfony升级到版本4,后者发生了很大变化。 5.6文档链接到this,这可能是要查看的内容。

对不起,这不是一个完整的答案。以为我只是说出我所知道的,希望它有用。

答案 1 :(得分:0)

根据documentation,这是你应该通过的:

HEADER_X_FORWARDED_AWS_ELB

它引用了AWS ELB,但对于Heroku来说它应该是相同的,因为它不会发送&#34; X-Forwarded-Host&#34;