我有一个reverseeproxy服务,我使用SharpReverseProxy来处理所有传入的请求:
为了配置服务,以下代码位于Startup
类:
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory) {
app.UseProxy(new List<ProxyRule> {
new ProxyRule {
Matcher = uri => uri.AbsoluteUri.Contains("/api/"),
Modifier = (req, user) => {
var match = Regex.Match(req.RequestUri.AbsolutePath, "/api/(.+)service");
req.RequestUri = new Uri(string.Format("http://{0}.{1}/{2}",
match.Groups[1].Value,
req.RequestUri.Host,
req.RequestUri.AbsolutePath.Replace(match.Value, "/api/")
));
},
RequiresAuthentication = true
}
},
r => {
_logger.LogDebug($"Proxy: {r.ProxyStatus} Url: {r.OriginalUri} Time: {r.Elapsed}");
if (r.ProxyStatus == ProxyStatus.Proxied) {
_logger.LogDebug($" New Url: {r.ProxiedUri.AbsoluteUri} Status: {r.HttpStatusCode}");
}
});
}
如何以外部https方式公开此服务?
我知道我们可以添加一个FabricTransportServiceRemotingListener
的监听器,如下所示:
new ServiceInstanceListener(serviceContext => new FabricTransportServiceRemotingListener(serviceContext,
new MyService(),
new FabricTransportRemotingListenerSettings
{
EndpointResourceName = "MyServiceEndpoint"
}), "MyServiceEndpoint"),
我的问题是,我不理解应该用MyService()
替换什么,因为顶部的ReverseProxy代码没有服务。
如何将reverseeproxy配置公开为服务,从而能够通过FabricTransportRemotingListenerSettings
公开它?
答案 0 :(得分:2)
你不能。 SF远程处理是一种特定于平台的通信机制。此外,它不打算在群集外部使用。
您可以公开HttpSysCommunicationListener
以将您的代理公开为可靠服务的HTTP endpoint。
确保将端点配置为HTTPS,如上所述。