Sdílet prostřednictvím


Omezování rychlosti YARP

Úvod

Reverzní proxy server je možné použít k omezování požadavků před jejich směrováním na cílové servery. To může snížit zatížení cílových serverů, přidat vrstvu ochrany a zajistit implementaci konzistentních zásad napříč vašimi aplikacemi.

Tato funkce je dostupná jenom v případě, že používáte .NET 7.0 nebo novější.

Výchozí hodnoty

U požadavků se neprovádí žádné omezování rychlosti, pokud není povoleno v konfiguraci trasy nebo aplikace. Middleware omezování rychlosti (app.UseRateLimiter()) ale může použít výchozí limiter použitý pro všechny trasy a nevyžaduje žádné vyjádření výslovného souhlasu z konfigurace.

Příklad:

services.AddRateLimiter(options => options.GlobalLimiter = globalLimiter);

Konfigurace

Zásady omezení rychlosti lze zadat pro každou trasu prostřednictvím RouteConfig.RateLimiterPolicy a mohou být nastaveny v oddílech Routes konfiguračního souboru. Stejně jako u jiných vlastností trasy je možné toto nastavení upravit a znovu načíst bez restartování proxy serveru. Názvy zásad nerozlišují velikost písmen.

Příklad:

{
  "ReverseProxy": {
    "Routes": {
      "route1" : {
        "ClusterId": "cluster1",
        "RateLimiterPolicy": "customPolicy",
        "Match": {
          "Hosts": [ "localhost" ]
        }
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "https://localhost:10001/"
          }
        }
      }
    }
  }
}

zásady RateLimiter představují základní koncept ASP.NET, který proxy server využívá. Proxy poskytuje výše uvedenou konfiguraci pro určení zásad pro jednotlivé trasy a zbytek se zpracovává stávajícím middlewarem pro omezování rychlosti ASP.NET Core.

Zásady RateLimiter je možné nakonfigurovat ve službách následujícím způsobem:

services.AddRateLimiter(options =>
{
    options.AddFixedWindowLimiter("customPolicy", opt =>
    {
        opt.PermitLimit = 4;
        opt.Window = TimeSpan.FromSeconds(12);
        opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
        opt.QueueLimit = 2;
    });
});

Pak přidejte middleware RateLimiter.

app.UseRateLimiter();

app.MapReverseProxy();

Informace o nastavení vámi preferovaného typu omezení rychlosti najdete v dokumentaci k omezení rychlosti.

Zakázat omezování rychlosti

Zadání hodnoty disable v parametru RateLimiterPolicy trasy znamená, že middleware omezovače rychlosti na tuto trasu nepoužije žádné zásady, a to ani výchozí zásady.