ASP.NET?Core設(shè)置Ocelot網(wǎng)關(guān)限流
1.限流(Rate Limiting)
很多時候?yàn)榱朔乐笵oS攻擊,我們會通過限流方式對上游請求進(jìn)行限制,以保護(hù)下游服務(wù)不會負(fù)荷過載,為客戶端提供高質(zhì)量的資源服務(wù)。在Ocelot限流項(xiàng)目示例中,通過APIGateway項(xiàng)目路由RateLimitOptions選項(xiàng)可以配置限流。對解決方案的示例APIServices項(xiàng)目Get方法進(jìn)行限流,文件配置具體代碼如下:
{
"Routes": [
{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9001
}
],
"UpstreamPathTemplate": "/customers",
"UpstreamHttpMethod": [ "Get" ],
"RateLimitOptions": {
//客戶端白名單。名單中的客戶端不會被限流。
"ClientWhitelist": [],
//是否啟用限流。
"EnableRateLimiting": true,
//限流時間(1s,5m,1h,1d)。在限流時間內(nèi)限制請求數(shù),需要等PeriodTimespan時間過去了,才能再次發(fā)起請求。
"Period": "1s",
//限流時間間隔,限流后多少秒后才可以再次發(fā)起請求。
"PeriodTimespan": 3,
//限制請求數(shù)。
"Limit": 1
}
}
],
//全局配置,所有下游服務(wù)都執(zhí)行如下限流配置
"GlobalConfiguration": {
"RequestIdKey": "OcRequestId",
"AdministrationPath": "/administration",
"RateLimitOptions": {
//是否禁用X-Rate-Limit和Retry-After標(biāo)頭。
"DisableRateLimitHeaders": false,
//限流返回的消息。
"QuotaExceededMessage": "Customize Tips!"
}
}
}下面來介紹下RateLimitOptions選項(xiàng)幾個參數(shù):
- ClientWhitelist:客戶端白名單。名單中的客戶端不會被限流。
- EnableRateLimiting:是否啟用限流。
- Period:限流時間(1s,5m,1h,1d)。在限流時間內(nèi)限制請求數(shù),需要等PeriodTimespan時間過去了,才能再次發(fā)起請求。
- PeriodTimespan:限流時間間隔,限流后多少秒后才可以再次發(fā)起請求。
- Limit:限制請求數(shù)。
- DisableRateLimitHeaders:是否禁用X-Rate-Limit和Retry-After標(biāo)頭。
- QuotaExceededMessage:限流返回的消息。
- HttpStatusCode:限流時候,指定返回的HTTP狀態(tài)代碼。
- ClientIdHeader:允許您指定應(yīng)用于標(biāo)識客戶端的標(biāo)頭。默認(rèn)情況下為“ClientId”。
2.項(xiàng)目演示
2.1APIGateway項(xiàng)目
添加Ocelot服務(wù)注入和Logging信息輸出:
public class Startup
{
public Startup(IWebHostEnvironment env)
{
var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
builder.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json")
//add configuration.json
.AddJsonFile("configuration.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
//輸出Logging信息;
services.AddLogging(logging =>
{
logging.AddConsole();
logging.AddDebug();
});
//添加Ocelot服務(wù);
services.AddOcelot(Configuration);
}
public void Configure(IApplicationBuilder app)
{
//使用Ocelot;
app.UseOcelot().Wait();
}
}2.2APIServices項(xiàng)目
項(xiàng)目添加一個Get方法,對應(yīng)APIGateway項(xiàng)目的路由上下游配置,具體代碼如下:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}2.3項(xiàng)目運(yùn)行
輸入dotnet run --project 項(xiàng)目路徑\項(xiàng)目文件.csproj把兩個項(xiàng)目啟動起來,通過在瀏覽器不斷刷新上游服務(wù)地址,會看到如下信息:


根據(jù)上述信息可以知道在1秒時間內(nèi),如果請求數(shù)超過路由配置限制數(shù),那么Ocelot網(wǎng)關(guān)就會直接返回429狀態(tài)碼和全局給客戶端,不會再轉(zhuǎn)發(fā)到對應(yīng)下游服務(wù)方法去,防止了客戶端惡意攻擊,保證了下游服務(wù)不會負(fù)荷過載!
到此這篇關(guān)于ASP.NET Core設(shè)置Ocelot網(wǎng)關(guān)限流的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Asp.Net?Core7?preview4限流中間件新特性詳解
- ASP.NET?Core基于滑動窗口實(shí)現(xiàn)限流控制
- ASP.NET?Core中間件實(shí)現(xiàn)限流的代碼
- 解決ASP.NET?Core中使用漏桶算法限流的問題
- ASP.NET?Core中使用滑動窗口限流的問題及場景分析
- ASP.NET?Core使用固定窗口限流
- ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn)
- Asp.NET Core 限流控制(AspNetCoreRateLimit)的實(shí)現(xiàn)
- ASP.NET Core對不同類型的用戶進(jìn)行區(qū)別限流詳解
- 在Asp.netCore中使用Attribute來描述限流的操作步驟
相關(guān)文章
如何在ASP.NET Core應(yīng)用程序運(yùn)行Vue并且部署在IIS上詳解
這篇文章主要給大家介紹了關(guān)于如何運(yùn)行Vue在ASP.NET Core應(yīng)用程序并且部署在IIS上的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
asp.net下經(jīng)典數(shù)據(jù)庫記錄分頁代碼
asp.net下經(jīng)典數(shù)據(jù)庫記錄分頁代碼...2007-04-04
ASP.NET MVC學(xué)習(xí)教程之Razor語法
這篇文章主要給大家介紹了關(guān)于ASP.NET MVC學(xué)習(xí)教程之Razor語法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
asp.net CommunityServer中的wwwStatus
最近不得不對這個論壇進(jìn)行研究,以適應(yīng)后面的發(fā)展,現(xiàn)在同事研究太吃力了,以后改些東西,估計(jì)又要...打開web項(xiàng)目中的communityserver.config發(fā)現(xiàn)一個有趣的地方。2009-03-03
ASP.NET MVC5驗(yàn)證系列之客戶端驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5驗(yàn)證系列之客戶端驗(yàn)證,感興趣的小伙伴們可以參考一下2016-07-07
.Net6.0+Vue3實(shí)現(xiàn)數(shù)據(jù)簡易導(dǎo)入功能全過程
最近在用VUE做一個數(shù)據(jù)導(dǎo)入的功能,下面這篇文章主要給大家介紹了關(guān)于使用.Net6.0+Vue3實(shí)現(xiàn)數(shù)據(jù)簡易導(dǎo)入功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
.net搜索查詢并實(shí)現(xiàn)分頁實(shí)例
.net搜索查詢并實(shí)現(xiàn)分頁實(shí)例,需要的朋友可以參考一下2013-03-03

