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推荐的那样信任$headers
和Forwarded
标头”?
答案 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;