为 Laravel 设置可信代理

4.4.2 2022-04-26 22:21 UTC

README

Build Status Total Downloads

设置可信代理可以正确生成 URL、重定向、处理会话和登录 Laravel,当处于负载均衡器或缓存等反向代理后面时。

安装

Laravel 5.5+ 包含此包。如果您使用的是 Laravel 5.5 或更高版本,您不需要单独将此包添加到项目中。

Laravel 5.0 - 5.4

要安装可信代理,请使用

composer require fideloper/proxy:^3.3

Laravel 4

composer require fideloper/proxy:^2.0

设置

有关在 Laravel 5.5+ 中使用可信代理的说明,请参阅上面的文档。对于 Laravel 4.0 - 5.4,请参阅 维基

这能做什么?

设置可信代理可以正确生成 URL、重定向、处理会话和记录 Laravel 在反向代理后面的操作。

如果您的 Web 服务器位于负载均衡器(Nginx、HAProxy、Envoy、ELB/ALB 等)、HTTP 缓存(CloudFlare、Squid、Varnish 等)或其他中间代理(反向代理)后面,这将非常有用。

这是如何工作的?

位于反向代理后面的应用程序通常读取一些 HTTP 标头,如 X-ForwardedX-Forwarded-ForX-Forwarded-Proto(等等),以了解发起 HTTP 请求的实际终端客户端。

如果这些标头没有设置,则应用程序代码会认为每个传入的 HTTP 请求都来自代理。

Laravel(技术上讲是 Symfony HTTP 基类)有一个“可信代理”的概念,其中那些 X-Forwarded 标头只有在请求的源 IP 地址已知时才会使用。换句话说,只有当代理可信时,它才会信任那些标头。

此包创建了一个更简单的接口来访问该选项。您可以设置代理的 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 地址(如有)。欢迎更新或建议!