wakeworks / requestproxy
Silverstripe 4 模块,允许您代理访客对其他服务器的请求
1.0.1
2022-12-13 09:10 UTC
Requires
- ext-curl: *
- silverstripe/framework: ^4.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-13 13:15:31 UTC
README
简介
RequestProxy 允许您将用户的请求通过您的服务器路由。
想象一下,您想使用 Adobe Typekit 的字体,但您的数据保护官告诉您:“根据 GDPR,不得与美企通信”。Adobe 不允许自托管,因此您无法正常使用。但是,您可以通过您的服务器代理用户的请求,并将字体返回给用户,而无需透露他们的 IP 地址。
要求
- silverstripe/framework ^4.0
- php-curl 扩展
安装
composer require wakeworks/requestproxy
基本配置
WakeWorks\RequestProxy\RequestProxy: proxy_rules: link1: 'https://external/link/to/proxy' link2: 'https://external/link/to/proxy2'
您的链接现在可在 /_requestproxy/link1
和 /_requestproxy/link2
下使用。
用法
模板
在模板中,使用 $RequestProxy(link1)
获取链接
要求
use SilverStripe\View\Requirements; use WakeWorks\RequestProxy\RequestProxy; $proxy_url = RequestProxy::get_proxy_url('link1'); Requirements::css($proxy_url);
高级配置
通常,RequestProxy 将转发 Content-Type 标头和返回的 HTTP 状态码。但是,您可以强制使用其他值。
WakeWorks\RequestProxy\RequestProxy: proxy_rules: link3: url: 'https://external/link/to/proxy' content_type: 'text/css' status_code: 201
速率限制
代理请求可能存在风险,例如,用户理论上可能使您对目标服务进行 DDoS 攻击。
RequestProxy 实现了 Silverstripe 的 RateLimitMiddleware 来应对这种情况。默认情况下,每个链接每分钟允许 10 个请求。如果您想更改此值,可以更改其配置
--- Name: ratelimit After: - 'requestproxyratelimit' --- SilverStripe\Core\Injector\Injector: WakeWorks\RequestProxy\RateLimitMiddleware: class: WakeWorks\RequestProxy\Middlewares\RateLimitMiddleware properties: ExtraKey: 'requestproxylimiter' MaxAttempts: 10 Decay: 1
扩展钩子
提供了一些扩展钩子。
- 在
WakeWorks\RequestProxy\Controllers\RequestProxyController
中的updateResponse($response)
允许您更改默认 /_requestproxy 控制器的响应。 - 在
WakeWorks\RequestProxy\RequestProxy
中的updateCurlOptions($curl)
允许您向 $curl 对象添加更多或更改选项。 updateCurlResponseData($curl, $data)
允许您将 $curl 中的数据添加到RequestProxy::make_request
返回的 $data 中