bfg/proxy

为Laravel设置可信代理

5.0.0 2023-12-26 21:21 UTC

This package is not auto-updated.

Last update: 2024-09-18 23:21:25 UTC


README

Build Status Total Downloads

设置可信代理可以允许在Laravel后面有反向代理(如负载均衡器或缓存)时正确生成URL、重定向、会话处理和日志记录。

安装

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

配置

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

这有什么作用?

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

如果您使用的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地址,因此可能是私有网络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地址(如有)。欢迎更新或提出建议!