lumecent / proxy
为 Laravel 设置信任的代理
Requires
- php: >=5.4.0
- illuminate/contracts: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- illuminate/http: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- mockery/mockery: ^1.0
- phpunit/phpunit: ^8.5.8|^9.3.3
This package is auto-updated.
Last update: 2024-09-03 16:03:54 UTC
README
设置信任的代理可以允许在位于负载均衡器或缓存等反向代理之后的 Laravel 中正确生成 URL、重定向、处理会话和记录。
安装
Laravel 5.5 及以上版本已包含此包。如果您使用的是 Laravel 5.5 或更高版本,您不需要单独将此包添加到项目中。
- Laravel 5.5 文档 (
fideloper/proxy:~3.3
) - Laravel 5.6 文档 (
fideloper/proxy:^4.0
) - Laravel 5.7 文档 (
fideloper/proxy:^4.0
) - Laravel 5.8 文档 (
fideloper/proxy:^4.0
) - Laravel 6.x 文档 (
fideloper/proxy:^4.0
) - Laravel 7.x 文档 (
fideloper/proxy:^4.2
) - Laravel 8.x 文档 (
fideloper/proxy:^4.3
) - Laravel 9.x 文档 (不要使用此包. 解释在这里, 升级文档在这里)
Laravel 5.0 - 5.4
要安装 Trusted Proxy,请使用
composer require fideloper/proxy:^3.3
Laravel 4
composer require fideloper/proxy:^2.0
设置
有关在 Laravel 5.5+ 中使用 Trusted Proxy 的信息,请参阅上面的文档。对于 Laravel 4.0 - 5.4,请参阅 维基。
这是做什么的?
设置信任的代理可以在 Laravel 后面有反向代理时正确生成 URL、重定向、处理会话和记录。
如果您的 Web 服务器位于负载均衡器(Nginx、HAProxy、Envoy、ELB/ALB 等)、HTTP 缓存(CloudFlare、Squid、Varnish 等)或其他中间代理之后,这将很有用。
这是如何工作的?
位于反向代理后面的应用程序通常读取一些 HTTP 标头,如 X-Forwarded
、X-Forwarded-For
、X-Forwarded-Proto
(以及更多),以了解发起 HTTP 请求的实际端客户端。
如果这些头未设置,则应用程序代码会认为每个传入的 HTTP 请求都来自代理。
Laravel(技术上讲是 Symfony HTTP 基础类)有一个“信任代理”的概念,其中只有当请求的源 IP 地址已知时才会使用这些 X-Forwarded
头。换句话说,只有当代理被信任时,它才会信任这些头。
此包创建了一个更易于使用的接口。您可以设置代理的 IP 地址(应用程序将看到的,因此可能是私有网络 IP 地址),并且 Symfony HTTP 类将知道如果包含这些头的 HTTP 请求来自信任的代理,则使用 X-Forwarded
头。
这为什么重要?
一种非常常见的负载均衡方法是将 https://
请求发送到负载均衡器,但将 http://
请求发送到负载均衡器后面的应用程序服务器。
例如,您可能通过浏览器发送一个请求到 https://example.org
。负载均衡器随后可能将请求发送到位于 http://192.168.1.23
的应用程序服务器。
如果服务器返回重定向或生成资产URL,会发生什么?用户的浏览器会收到一个重定向或包含 http://192.168.1.23
的HTML,这显然是不正确的。
实际情况是,应用程序认为它的主机名为 192.168.1.23
,协议为 http://
。它不知道最终客户端使用了 https://example.org
进行其Web请求。
因此,应用程序需要知道读取 X-Forwarded
标头来获取正确的请求详情(协议 https://
,主机 example.org
)。
Laravel/Symfony会自动读取这些标头,但仅当受信任的代理配置设置为“信任”负载均衡器/反向代理时。
注意:我们很多人使用托管负载均衡器/代理,例如AWS ELB/ALB等。我们不知道这些反向代理的IP地址,因此在这种情况下需要信任 所有 代理。
这里的权衡是允许人们可能伪造
X-Forwarded
标头所带来的安全风险。
按服务划分的IP地址
这个维基页面 列出了一些流行的服务和它们的服务器IP地址(如果有的话)。欢迎任何更新或建议!