ecphp / reverse-proxy-helper-bundle
辅助包,从给定的基本URL配置请求头。
Requires
- php: >= 7.2.5
- ext-filter: *
- symfony/framework-bundle: ^5.2.4
Requires (Dev)
- ecphp/php-conventions: ^1
- friends-of-phpspec/phpspec-code-coverage: ^6.1
- infection/infection: ^0.23
- infection/phpspec-adapter: ^0.1.1
- phpspec/phpspec: ^7
- symfony/http-kernel: ^5.2.4
This package is auto-updated.
Last update: 2024-09-10 03:20:15 UTC
README
Reverse Proxy Helper Bundle
在欧洲委员会,许多应用程序都位于反向代理服务器之后。
如果反向代理配置设置不当,Symfony应用程序将生成无效的URI,因为它们将使用自己的内部服务器URI而不是反向代理提供的URI。
由于某种原因,欧洲委员会的反向代理服务没有发送所有必要的头信息,以允许Symfony生成正确的URI。
此捆绑包将通过提供缺少的头部信息和设置适当的可信代理配置来确保URI被正确生成。
要求
- PHP >= 7.2.5
- Symfony >= 5.2.4
安装
composer require ecphp/reverse-proxy-helper-bundle
然后,在您的Symfony应用程序中,在 config/packages
中创建一个新的配置文件 reverse-proxy-helper.yaml
reverse_proxy_helper: base_url: https://frontend-url-foobar:12345/app1/
如果需要,您也可以将此文件移动到特定环境,并根据环境调整配置。
您还可以使用环境变量
更新您的配置文件以使用环境变量 REVERSE_PROXY_URL
reverse_proxy_helper: base_url: '%env(resolve:REVERSE_PROXY_URL)%'
您还需要在 framework.yaml
中配置 trusted_headers
和 trusted_proxies
,例如
framework: trusted_proxies: '127.0.0.1,REMOTE_ADDR' trusted_headers: ['x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto', 'x-forwarded-port', 'x-forwarded-prefix']
这有什么作用?
此捆绑包确保HTTP请求在反向代理之后设置正确的头信息。
设置可信代理和正确的头信息允许在反向代理之后在Symfony中进行正确的URL生成、重定向、会话处理和日志记录。
如果您的工作服务器位于负载均衡器(例如,Nginx、HAProxy、Envoy、ELB/ALB等)、HTTP缓存(例如,CloudFlare、Squid、Varnish等)或其他中间代理之后,这将非常有用。
为什么这很重要?
一个非常常见的负载均衡方法是将 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
)。
Symfony能够读取这些头部,但前提是可信代理配置正确设置为“信任”负载均衡器/反向代理。
这是如何工作的?
反向代理之后的应用程序通常读取一些HTTP头部,例如 X-Forwarded-*
(X-Forwarded-For
、X-Forwarded-Proto
、X-Forwared-Host
、X-Forwarded-Port
、X-Forwarded-Prefix
),以了解实际发起HTTP请求的真实终端客户端。
如果这些头部没有设置,那么应用程序代码会认为每个传入的HTTP请求都来自代理。
Symfony HTTP基础类有一个“可信代理”的概念,其中只有在请求的源IP地址已知时,才会使用那些 X-Forwarded-*
头部。
此包创建了一个更简单的接口来访问该选项。您可以设置代理的IP地址(应用程序看到的IP地址,因此可能是私有网络IP地址),当HTTP请求包含这些头时,Symfony将使用X-Forwarded-*
头。
开源贡献
- symfony/framework-bundle: #40281