coolchi / proxy
为 Laravel 设置受信任的代理
Requires
- php: >=5.4.0
- illuminate/contracts: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- illuminate/http: ^5.0|^6.0|^7.0|^8.0|^9.0
- mockery/mockery: ^1.0
- phpunit/phpunit: ^8.5.8|^9.3.3
This package is not auto-updated.
Last update: 2024-09-25 13:14:57 UTC
README
设置受信任的代理可以允许在 Laravel 后面有反向代理(如负载均衡器或缓存)时正确生成 URL、进行重定向、处理会话和记录。
安装
Laravel 10.0
要安装 Trusted Proxy,使用以下命令:
composer require coolchi/proxy:^3.3
设置
有关在 Laravel 10+ 中使用 Trusted Proxy 的说明,请参阅上面的文档。请参阅维基。
这能做什么?
设置受信任的代理可以在 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 地址。欢迎任何更新或建议!