ksquaredcoding / proxy
为Laravel设置可信代理
Requires
- php: ^8.2
- illuminate/contracts: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- illuminate/http: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- mockery/mockery: ^1.4
- phpunit/phpunit: ^8.5.8|^9.3.3|^10.0
This package is not auto-updated.
Last update: 2024-09-24 19:16:52 UTC
README
设置可信代理允许在负载均衡器或缓存等反向代理后面正确生成URL、重定向、处理会话和记录Laravel。
安装
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
要安装可信代理,请使用
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-Forwarded
、X-Forwarded-For
、X-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地址(如有)。欢迎更新或建议!