AspNetCoreは、ミドルウェアを導入制限IpRateLimitMiddleware

  IpRateLimitMiddleware( GitHubの:AspNetCoreRateLimit )頻繁にクライアントアクセスサーバーの場合、それは周波数を制限することができ、クライアントAPI呼び出し周波数を制御するためのミドルウェアASPNETCore絞りでは、アクセスサーバ側の圧力が低下しています。または重要なデータにクロール爬虫類がある場合、また、このように彼のスピードのクロールを制限し、毎日APIの/いくつかの数または特定のIPの転送を制限することができます。
 
まずnugetのインストールは、インストール・パッケージAspNetCoreRateLimit、コードでのスタートアップコードは、サービスや注射を追加します
 

StartUp.csコード

        公共 のボイドConfigureServices(IServiceCollectionサービス)
        { 
            // appsettings.jsonから設定をロードするために必要な
            services.AddOptions(); 

            // 店のレート制限カウンタとIP規則に必要な
            services.AddMemoryCache(); 

            // appsettings.jsonから負荷全体構成 
            services.Configure <IpRateLimitOptions>(Configuration.GetSection(" IpRateLimiting " )); 

            // appsettings.jsonから負荷のIPルール 
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection(" IpRateLimitPolicies " )); 

            //注入カウンタルール格納 
            services.AddSingleton <IIpPolicyStore、MemoryCacheIpPolicyStore> (); 
            services.AddSingleton <IRateLimitCounterStore、MemoryCacheRateLimitCounterStore> (); 

            // フレームワークサービスを追加します。
            services.AddMvc(); 

            //  https://github.com/aspnet/Hosting/issues/793 
            // IHttpContextAccessorサービスは、デフォルトで登録されていません。
            // のclientId /クライアントIPリゾルバはそれを使用します。
            services.AddSingleton <IHttpContextAccessor、HttpContextAccessor> (); 

            // 設定(リゾルバ、キービルダーに対抗)
            services.AddSingleton <IRateLimitConfiguration、RateLimitConfiguration> (); 
        }
        // このメソッドはランタイムによって呼び出されます。HTTPリクエストパイプラインを設定するには、このメソッドを使用します。
        公共 ボイド設定(IApplicationBuilderアプリ、IHostingEnvironment ENV)
        { 
            app.UseIpRateLimiting()。
            // もし(env.IsDevelopment())
             //     app.UseDeveloperExceptionPage(); 
            app.UseMvc(); 
        }

IPRateLimitingは、他のミドルウェア前に登録しなければならない、またはAPIリクエストの計算が間違っている可能性があります。

あなたはバランスのアプリケーションをロードする場合は、使用する必要があるIDistributedCacheすべてのチョウゲンボウのインスタンスが同じレート制限のストレージを持っているように、RedisのかSQLServerのを。代わりにMemoryCacheを使用しての、分散ストレージを注入するようになります。

設定と一般的なルールはappsettings.json:

  "IpRateLimiting" :{
     "EnableEndpointRateLimitingは": "StackBlockedRequests": "RealIpHeader": "X-のReal-IP"  "ClientIdHeader": "X-ClientIdを"  "HttpStatusCode":429 // "IpWhitelist" :[ "127.0.0.1"、 ":: 1/10"、 "192.168.0.0/24"]、
    // "EndpointWhitelist":[ "取得:/ API /ライセンス"、 "*:/ API /ステータス"] 、
    // "ClientWhitelist":[ "DEV-ID-1"、 "DEV-ID-2"]、 
    "GeneralRules" 。[ 
      {
         "エンドポイント": "*"  "期間": "1"  "制限":1  
      }、
      {
         "エンドポイント": "*"  "期間": "15メートル"  "制限":100 
      }、
      {
         "エンドポイント": "*"  "期間"、 "12H"  "制限":1000 
      }、
      {
         "エンドポイント": "*"  "期間": "7D"  "リミット":10000 
      } 
    ] 
  }

場合はEnableEndpointRateLimiting、あなたがに設定falseグローバル制限アプリケーション、そして唯一のエンドポイントとして持つルールを適用します*あなたは2回目の呼び出しごとに5回の制限を設定した場合、任意のHTTPエンドポイントへの呼び出しは、この制限にカウントされます。

場合はEnableEndpointRateLimiting設定しtrue、制限のような、各エンドポイントに適用されます{HTTP_Verb}{PATH}あなたがする必要がある場合たとえば、*:/api/valuesクライアントコールあたり5の上限を設定し、次のことができGET /api/values、毎秒5回コールするだけでなく、5回呼び出すことができますPUT /api/values

場合StackBlockedRequestsに設定するfalseAPI呼び出しを拒否通話カウンタの数に追加されません。例:クライアントは毎秒3つの要求を行い、あなたが毎秒1つのコールの制限を設定した場合、分または他の制限ごとに毎日のカウンタは、API呼び出しの成功ということのみ最初の呼び出しを記録します。あなたが表示APIの呼び出しに含まれることを望む場合に設定する必要があり、他の時間(分、時間、など)拒否StackBlockedRequestsにしますtrue

RealIpHeader使用、ケストレルサーバーがリバースプロキシの背後にある、あなたは別のヘッダーを使用して、クライアントのIP抽出した場合、プロキシサーバーX-Real-IPを使用するように設定するには、このオプションを選択します。

されますClientIdHeader、クライアントIDのホワイトリストを抽出するために使用されます。そこにクライアントIDがこのヘッダにあり、ClientWhitelist値が一致を指定した場合、アプリケーションが律速されていません。

の特定のIP appsettings.jsonをカバーする一般的なルール:

"IpRateLimitPolicies" :{
     "IpRules" :[ 
      {
         "IP": "84.247.85.224"  "ルール" :[ 
          {
             "エンドポイント": "*"  "期間": "1"  "制限":10 
          }、
          {
             "エンドポイント": "*"  "期間": "15メートル"  "制限":200 
          } 
        ] 
      }、
      {
         "IP": "192.168.3.22/25"  "ルール":[ 
          {
             "エンドポイント": "*"  "期間": "1" "制限":5 
          }、
          {
             "エンドポイント": "*"  "期間": "15メートル"  "制限":150 
          }、
          {
             "エンドポイント": "*"  "期間": "12H"  "リミット":500 
          } 
        ] 
      } 
    ] 
  }

フィールドは、 "FE80 :: / 10" または、そのような "192.168.0.0/24" として、IP v6のIP V4と値と範囲をサポートしています "192.168.0.0-192.168.0.255。"

 



おすすめ

転載: www.cnblogs.com/lgxlsm/p/11303631.html