ASP.NET?Core設(shè)置Ocelot網(wǎng)關(guān)限流
1.限流(Rate Limiting)
很多時(shí)候?yàn)榱朔乐笵oS攻擊,我們會(huì)通過(guò)限流方式對(duì)上游請(qǐng)求進(jìn)行限制,以保護(hù)下游服務(wù)不會(huì)負(fù)荷過(guò)載,為客戶端提供高質(zhì)量的資源服務(wù)。在Ocelot限流項(xiàng)目示例中,通過(guò)APIGateway項(xiàng)目路由RateLimitOptions選項(xiàng)可以配置限流。對(duì)解決方案的示例APIServices項(xiàng)目Get方法進(jìn)行限流,文件配置具體代碼如下:
{ "Routes": [ { "DownstreamPathTemplate": "/api/values", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9001 } ], "UpstreamPathTemplate": "/customers", "UpstreamHttpMethod": [ "Get" ], "RateLimitOptions": { //客戶端白名單。名單中的客戶端不會(huì)被限流。 "ClientWhitelist": [], //是否啟用限流。 "EnableRateLimiting": true, //限流時(shí)間(1s,5m,1h,1d)。在限流時(shí)間內(nèi)限制請(qǐng)求數(shù),需要等PeriodTimespan時(shí)間過(guò)去了,才能再次發(fā)起請(qǐng)求。 "Period": "1s", //限流時(shí)間間隔,限流后多少秒后才可以再次發(fā)起請(qǐng)求。 "PeriodTimespan": 3, //限制請(qǐng)求數(shù)。 "Limit": 1 } } ], //全局配置,所有下游服務(wù)都執(zhí)行如下限流配置 "GlobalConfiguration": { "RequestIdKey": "OcRequestId", "AdministrationPath": "/administration", "RateLimitOptions": { //是否禁用X-Rate-Limit和Retry-After標(biāo)頭。 "DisableRateLimitHeaders": false, //限流返回的消息。 "QuotaExceededMessage": "Customize Tips!" } } }
下面來(lái)介紹下RateLimitOptions選項(xiàng)幾個(gè)參數(shù):
- ClientWhitelist:客戶端白名單。名單中的客戶端不會(huì)被限流。
- EnableRateLimiting:是否啟用限流。
- Period:限流時(shí)間(1s,5m,1h,1d)。在限流時(shí)間內(nèi)限制請(qǐng)求數(shù),需要等PeriodTimespan時(shí)間過(guò)去了,才能再次發(fā)起請(qǐng)求。
- PeriodTimespan:限流時(shí)間間隔,限流后多少秒后才可以再次發(fā)起請(qǐng)求。
- Limit:限制請(qǐng)求數(shù)。
- DisableRateLimitHeaders:是否禁用X-Rate-Limit和Retry-After標(biāo)頭。
- QuotaExceededMessage:限流返回的消息。
- HttpStatusCode:限流時(shí)候,指定返回的HTTP狀態(tài)代碼。
- ClientIdHeader:允許您指定應(yīng)用于標(biāo)識(shí)客戶端的標(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)目添加一個(gè)Get方法,對(duì)應(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把兩個(gè)項(xiàng)目啟動(dòng)起來(lái),通過(guò)在瀏覽器不斷刷新上游服務(wù)地址,會(huì)看到如下信息:
根據(jù)上述信息可以知道在1秒時(shí)間內(nèi),如果請(qǐng)求數(shù)超過(guò)路由配置限制數(shù),那么Ocelot網(wǎng)關(guān)就會(huì)直接返回429狀態(tài)碼和全局給客戶端,不會(huì)再轉(zhuǎn)發(fā)到對(duì)應(yīng)下游服務(wù)方法去,防止了客戶端惡意攻擊,保證了下游服務(wù)不會(huì)負(fù)荷過(guò)載!
到此這篇關(guān)于ASP.NET Core設(shè)置Ocelot網(wǎng)關(guān)限流的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Asp.Net?Core7?preview4限流中間件新特性詳解
- ASP.NET?Core基于滑動(dòng)窗口實(shí)現(xiàn)限流控制
- ASP.NET?Core中間件實(shí)現(xiàn)限流的代碼
- 解決ASP.NET?Core中使用漏桶算法限流的問(wèn)題
- ASP.NET?Core中使用滑動(dòng)窗口限流的問(wèn)題及場(chǎng)景分析
- ASP.NET?Core使用固定窗口限流
- ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn)
- Asp.NET Core 限流控制(AspNetCoreRateLimit)的實(shí)現(xiàn)
- ASP.NET Core對(duì)不同類型的用戶進(jìn)行區(qū)別限流詳解
- 在Asp.netCore中使用Attribute來(lái)描述限流的操作步驟
相關(guān)文章
一步步打造簡(jiǎn)單的MVC電商網(wǎng)站BooksStore(2)
這篇文章主要和大家一起一步步打造一個(gè)簡(jiǎn)單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第二篇,添加分類導(dǎo)航、加入購(gòu)物車,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04高仿Windows Phone QQ登錄界面實(shí)例代碼
這篇文章主要介紹了高仿Windows Phone QQ登錄界面實(shí)例代碼,有需要的朋友可以參考一下2013-12-12asp.net SAF 中緩存服務(wù)的實(shí)現(xiàn)
對(duì)緩存的興趣源于張子陽(yáng)寫(xiě)的一篇文章《SAF 中緩存服務(wù)的實(shí)現(xiàn)》中的一個(gè)例子:2008-08-08ASP.NET Session會(huì)導(dǎo)致的性能問(wèn)題
你的站點(diǎn)有被客戶投訴很慢嗎?是不是查了很多遍還是沒(méi)有完全解決?是不是數(shù)據(jù)庫(kù)沒(méi)有發(fā)現(xiàn)異常,CPU也沒(méi)有異常,內(nèi)存占用量沒(méi)有異常,GC計(jì)數(shù)沒(méi)有異常,硬盤(pán)IO也沒(méi)有異常,帶寬沒(méi)有異常,線路沒(méi)有異常,沒(méi)有丟包,但就是被投訴?2009-07-07淺談ASP.NET Core 2.0 布局頁(yè)面(譯)
本篇文章主要介紹了淺談ASP.NET Core 2.0 布局頁(yè)面(譯),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11