wakeworks/requestproxy

Silverstripe 4 模块,允许您代理访客对其他服务器的请求

安装次数: 53

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:silverstripe-vendormodule

1.0.1 2022-12-13 09:10 UTC

This package is auto-updated.

Last update: 2024-09-13 13:15:31 UTC


README

Packagist Version GitHub

简介

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 中