--- ocelot,代理
主题列表:juejin, ocelot, webapi
贡献主题:github.com/xitu/juejin…
当服务器上有多个应用程序对外提供访问时,又不想对外暴露多个端口,造成系统漏洞。可以通过网关进行端口代理。目前主流的是通过nginx进行代理。 前几天我们有几个webapi的接口需要对外开放,所以决定做端口映射。通过开放某个端口,不同的路径配置代理不同端口。 刚开始采用了nginx进行转发,但是在配置的时候,出现了很多问题。(接口接入了swagger,配置swaggerUI和接口时,出现了路径冲突)。后来查找资料,发现ocelot也可以进行网关代理。与似乎查找资料,写demo。终于解决了这个问题。
第一步:自己在本地建立几个webapi的应用程序。并且发布出去,配置多个端口。最好接入swagger进行集成管理。易于展示。
第二步:新建一个ocelot程序。通过vs2019,新建项目,选择.NET Core WebApi,其实同第一步中的是一样的模式。建立好之后,需要安装nuget包。搜索ocelot并安装。这里建议根据不同的.NET Core版本去下载。我下载的是16.0.0版本。是比较稳定而且好用的。安装好ocelot之后,建立一个JSON文件,可以命名成ocelot.json。
第三步:配置ocelot.json文件。
这里只做简单的叙述,详细的可以自己去查找api,研究不同的参数属性。
"BaseUrl": "http://localhost:8000" 是你自己想要对外抛出的端口。
Routes 是 集合 形式的数据。每一个对象代表你所配置的不同内容。
"DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 8091 } ],
代表的是你想要转发的内部端口。比如说我某个api部署的是8091端口,我这里就配置8091.
DownstreamPathTemplate, DownstreamScheme和DownstreamHostAndPorts定义请求需要转发到哪个URL上去。
DownstreamHostAndPorts是一个集合,它定义了要转发到的下游服务的host和port。通常这个集合只需要一个条目就可以了,但是如果你想要搞负载均衡的话,可以在这指定多个条目。
UpstreamPathTemplate定义了ocelot用哪个发到ocelot的请求处理DownstreamPathTemplate。Ocelot根据UpstreamHttpMethod来针对同一个URL不同请求方式分别进行对应的处理。如果没指定UpstreamHttpMethod的话,那就是针对所有的HTTP请求方式。
可以为Template中的变量添加placeholder(以{something}的形式)。placeholder变量必须同时出现在DownstreamPathTemplate和UpstreamPathTemplate中。
可以通过Priority定义ReRoute的匹配的优先级别。
{ "Priority": 0 }
第四步:启动入口配置: 需要在Program中的 CreateHostBuilder 方法中加入以下代码
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile("appsettings" + hostingContext.HostingEnvironment.EnvironmentName + ".json", true, true)
.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
})
在Startup中的 ConfigureServices 方法中加入
services.AddOcelot();
在 Configure 方法中加入
app.UseOcelot().Wait();
第五步:配置ocelot.json之后就可以发布到IIS上去进行测试了。