1. 首页
  2. Laravel

Laravel 5.5现在包含TrustedProxy

Laravel v5.5一周前刚刚在LaraconEu发布。您可能已经注意到v5.5编写器.json文件需要fideloper/proxy composer包。对我来说,这是我必须在每个项目中立即包含的软件包之一,因为我每天都使用Amazon Web服务和谷歌云,所以我感谢Laravel 5.5默认包含了这个软件包。
设置软件包是轻而易举的事,我特别感谢这个软件包能够处理冗余的设置。让我们简单介绍一下这个包为Laravel提供了什么,以及为什么它是Laravel生态系统中的一个重要包。
TrustedProxy包做什么?
在较高的级别上,可信代理告诉Laravel可以信任的代理,以及如何映射来自请求的X-Forwarded-*头。
包自述可能做得更好,总结如下:
设置可信代理允许正确的URL生成和重定向,如果您的web服务器位于负载均衡器、HTTP缓存或其他中介(反向)代理之后,则在代理之后进行会话处理和登录Laravel非常有用。

Laravel使用Symfony来处理请求和响应。这些类具有处理代理的方法。但是,出于安全原因,在尝试读取X-Forwarded-*头之前,必须通知他们要\”信任\”的代理。
Laravel没有现成的\”信任\”代理的简单配置选项。这个软件包只提供了一个。使用代理
开发人员通常需要与云提供商(如Amazon Web服务)和内容交付网络(CDN)(如Cloudflare)合作以实现完整的站点交付,应用程序位于这些服务的后面,而不是直接暴露于世界。此外,您的应用程序甚至可能位于代理链的后面。
例如,当您的网站或应用程序的DNS指向CloudFlare时,HTTP请求会从CloudFlare代理到您的应用程序。
例如,您可能会在Laravel News上的HTTP响应中注意到一些CloudFlare标头:
***1在cURL响应中返回的几个头文件(CF-RAY和Server)。CloudFlare将请求代理到实际的应用程序,获取响应,附加几个头,然后将响应发送回最终用户。
由于CloudFlare在最终用户和应用程序之间代理,因此应用程序的所有请求看起来都是一样的。为了让应用程序知道发起请求的重要细节,代理将沿着X-Forwarded*头发送。
这里有几个代理将沿着发送的常见头:
– X-Forwarded-For–用于定义原始IP地址的标准头(参考)
– X-Forwarded-Host–用于在主机HTTP头中标识客户端请求的原始主机的事实上的标准头(reference)
– X-Forwarded-Proto–用于标识协议的事实上的标准标头,如HTTP或HTTPS(reference)
– X-Forwarded-Port–帮助您标识客户端用于连接到负载平衡器的端口(reference)
并非所有代理都使用事实上的标准标头,但此包可以帮助您映射这些标头,以便底层Symfony请求对象知道如何信任代理并获取正确的值。HTTPS->HTTP
如果您在负载平衡器级别终止TLS/SSL,您的应用程序可能会在内部通过HTTP接收请求,但实际上来自用户的原始请求是HTTPS。如果您在这种情况下,您的应用程序将从代理服务器接收这样的标头:
1X-Forwarded-Proto: https
TrustProxy中间件通过调用Symfony的HttpFoundationRequest::setTrustedProxies()方法自动使请求对象知道代理标头,因此任何PHP生成的URI都将知道使用HTTPS,即使请求是通过HTTP发出的。如果不调用setTrustedProxies(),Laravel应用程序将不知道原始请求以及如何正确处理该请求。
配置,包括在代理使用非标准头名称时提供映射:
1getClientIp()23* always gets the originating client IP, no matter24* how many proxies that client\”s request has25* subsequently passed through.26*/28\”192.168.1.10\”,29],3031/*32* Or, to trust all proxies that connect33* directly to your server, uncomment this:34*/35#>3637/*38* Or, to trust ALL proxies, including those that39* are in a chain of forwarding, uncomment this:40*/41#>4243/*44* Default Header Names45*46* Change these if the proxy does47* not send the default header names.48*49* Note that headers such as X-Forwarded-For50* are transformed to HTTP_X_FORWARDED_FOR format.51*52* The following are Symfony defaults, found in53* SymfonyComponentHttpFoundationRequest::$trustedHeaders54*55* You may optionally set headers to \”null\” here if you\”d like56* for them to be considered untrusted instead. Ex:57*58*>59*60* WARNING: If you\”re using AWS Elastic Load Balancing or Heroku,61* the FORWARDED and X_FORWARDED_HOST headers should be set to null62* as they are currently unsupported there.63*/65(defined(\”IlluminateHttpRequest::HEADER_FORWARDED\”) ? IlluminateHttpRequest::HEADER_FORWARDED :>70]71];
该配置允许您定义要信任的IP地址,或者您可以使用*和**信任代理链中的所有直接代理。请仔细查阅文档以及本文的最后部分,阅读有关锁定位于代理后面的应用程序的信息。
您可以通过运行Laravel 5.5中的config/trustedproxy.php:,不带参数运行vendor:publish将使用交互式模式,这使得发布供应商文件更加容易。了解更多信息
Symfony有一个简短的总结

Laravel 5.5现在包含TrustedProxy 为WP2原创文章,链接:https://www.wp2.cn/laravel/laravel-5-5%e7%8e%b0%e5%9c%a8%e5%8c%85%e5%90%abtrustedproxy/