Laravel 无法使TrustProxies中间件工作

Laravel 无法使TrustProxies中间件工作,laravel,load-balancing,laravel-5.5,laravel-middleware,Laravel,Load Balancing,Laravel 5.5,Laravel Middleware,在这里指向正确的方向后 我一直在尝试让Laravel TrustProxies中间件工作,但似乎忽略了X_PROTO头 我的场景 我在Laravel中的应用程序(刚从5.4升级到5.5)在负载均衡器后面,它将所有流量从HTTPS转换为HTTP 我的问题 所有重定向都通过HTTP而不是原始协议HTTPS进行 尝试的解决方案 从Laravel 5.4升级到5.5,并利用Laravel现成的TrustProxy中间件。 中间件具有: protected $proxies = '*'; /** *

在这里指向正确的方向后
我一直在尝试让Laravel TrustProxies中间件工作,但似乎忽略了X_PROTO头

我的场景
我在Laravel中的应用程序(刚从5.4升级到5.5)在负载均衡器后面,它将所有流量从HTTPS转换为HTTP

我的问题
所有重定向都通过HTTP而不是原始协议HTTPS进行

尝试的解决方案
从Laravel 5.4升级到5.5,并利用Laravel现成的TrustProxy中间件。
中间件具有:

protected $proxies = '*';

/**
 * The current proxy header mappings.
 *
 * @var array
 */
protected $headers = [
    Request::HEADER_FORWARDED => 'FORWARDED',
    Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
    Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
    Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
    Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
];
App\Http\Kernel已注册中间件:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];
我的发现:
来自服务器的Tcp转储将显示标头:

请求:

但响应在HTTP上具有位置:

其他评论:
由于我的应用程序从5.4升级到5.5,我复制了TrustProxies类,否则在5.5的新安装中就会出现该类。然后我在内核中注册了它。
也许我错过了一步

我的希望:
我的疲劳并没有使我的头脑变得模糊,我忽略了一个简单的错误

任何建议,提前谢谢

更新:
在Apache中启用了log_取证模块,我在请求中看到了x-forwarded-proto头

GET / HTTP/1.1
X_FORWARDED_PROTO:HTTPS
Host:mywebsiteaddress.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv%3a56.0) Gecko/20100101 Firefox/56.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:en-US,en;q=0.5
Accept-Encoding:gzip, deflate, br
Connection:keep-alive
Upgrade-Insecure-Requests:1
Cache-Control:max-age=0

有什么线索可以解释为什么Laravel没有在headers数组中出现吗?

确实是太累了。
负载平衡器一直在使用C#(IIS)应用程序的X#u转发#u协议头,因此网络团队这次以相同的方式设置头。
但对于Laravel,标题必须采用X-FORWARDED-PROTO的形式,据我所知,这是正确的名称(短划线而不是下划线)。

这就是为什么Laravel(实际上是Symfony)从请求中丢弃了头。

这确实很累。
GET / HTTP/1.1
X_FORWARDED_PROTO:HTTPS
Host:mywebsiteaddress.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv%3a56.0) Gecko/20100101 Firefox/56.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:en-US,en;q=0.5
Accept-Encoding:gzip, deflate, br
Connection:keep-alive
Upgrade-Insecure-Requests:1
Cache-Control:max-age=0
负载平衡器一直在使用C#(IIS)应用程序的X#u转发#u协议头,因此网络团队这次以相同的方式设置头。
但对于Laravel,标题必须采用X-FORWARDED-PROTO的形式,据我所知,这是正确的名称(短划线而不是下划线)。

这就是为什么Laravel(实际上是Symfony)从请求中丢弃头。

顺便说一句,我做了一个dd($\u服务器);在重定向之前的routes/web.php中,在标题中找不到X_FORWARED_PROTO。它在5.4上运行吗?@Suraj我没有在5.4上测试,因为它代表了更多的手动配置,这意味着出错的风险更大。考虑到更高的成功概率,我选择了更好的升级到5.5。我将在一个全新的5.5模拟应用程序中进行测试,但需要与我的网络团队协作来复制场景。您是否使用AWS负载平衡器?否@Suraj,它是我们自己的硬件负载平衡器。现在,它只是用于使用通配符ssl证书向internet公开我们的应用程序。此负载平衡器后面的所有应用都在HTTP中侦听。但我只是在Laravel apps上遇到了这个问题。顺便说一句,我做了一个dd($\u服务器);在重定向之前的routes/web.php中,在标题中找不到X_FORWARED_PROTO。它在5.4上运行吗?@Suraj我没有在5.4上测试,因为它代表了更多的手动配置,这意味着出错的风险更大。考虑到更高的成功概率,我选择了更好的升级到5.5。我将在一个全新的5.5模拟应用程序中进行测试,但需要与我的网络团队协作来复制场景。您是否使用AWS负载平衡器?否@Suraj,它是我们自己的硬件负载平衡器。现在,它只是用于使用通配符ssl证书向internet公开我们的应用程序。此负载平衡器后面的所有应用都在HTTP中侦听。但我只是在Laravel应用程序上遇到了这个问题。
GET / HTTP/1.1
X_FORWARDED_PROTO:HTTPS
Host:mywebsiteaddress.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv%3a56.0) Gecko/20100101 Firefox/56.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:en-US,en;q=0.5
Accept-Encoding:gzip, deflate, br
Connection:keep-alive
Upgrade-Insecure-Requests:1
Cache-Control:max-age=0