优化

优化CMS 12 -使用YARP实现反向代理

同事们坐在办公室的办公桌前看着笔记本电脑。库存图片

我完成的最后几个CMS实现都需要反向代理来显示外部内容。当我完成最后一个CMS 11项目时,我已经是反向代理的专家了。然后CMS 12的出现改变了一切。CMS 12在Linux web应用程序上迁移到。net Core。这一更改删除了在web中创建预留代理所需规则的可用性。配置文件。

如果Optimizely能够提供在DXC租户中设置反向代理的能力(可能是通过Cloudflare的配置),那就太好了,但这还没有实现。另外两种选择是使用像NGINX这样的产品在Optimizely前面作为反向代理,或者构建反向代理作为Optimizely CMS代码库的一部分。

YARP -另一个反向代理

基于客户的需求,我们走代码路线,选择YARP在Optimizely中处理我们的反向代理请求。YARP的伟大之处在于它是一个性能良好且健壮的反向代理,易于配置。

YARP是一个反向代理工具包,用于使用ASP的基础设施在。net中构建快速代理服务器。NET和。NET。YARP的关键区别在于,它被设计成易于定制和调整,以匹配每个部署场景的特定需求。- - - - - -net的博客

反向代理通常在ISO/OSI模型的传输层(第4层)上工作,并将客户机的请求路由到其他服务器。然而,YARP反向代理在第七层(HTTP层)上操作。传入和传出连接彼此独立,允许映射url并显示来自外部url的内容。

第一步是安装Yarp。ReverseProxy NuGet包。这可以通过包管理器或调用dotnet add package命令来添加包。然后在Startup.cs文件中配置YARP反向代理。配置可以通过代码或配置文件来完成。下面的示例通过代码设置反向代理。

配置YARP

以下代码被添加到我们的Startup.cs文件中的ConfigureService方法中:

public void ConfigureServices(IServiceCollection services) {... ...services.AddReverseProxy ();...}

然后更新Configure方法以注入IHttpForwarder,然后根据需要配置反向代理。对于我们的规则,我们只是接受来自URL段的任何请求/ somepath /并将请求转发到https://newurl.com/somepath/.下面是Configure方法的更新

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHttpForwarder forwarder) {... ...var变压器=新CustomProxyTransformer();var requestConfig = new ForwarderRequestConfig {ActivityTimeout = timspan . fromseconds (100)};app.UseEndpoints(endpoints => {endpoints. mapcontent ();endpoints.MapControllers ();endpoints.MapRazorPages ();端点。映射("/somepath/{**remainder}", async httpContext =>{//发送请求到carehub与proxytransformer var错误=等待转发器。SendAsync(httpContext, "https://newurl.com/somepath/", httpClient, requestConfig, transformer);//检查操作是否成功如果(错误!= ForwarderError.None) {var errorFeature = httpContext.GetForwarderErrorFeature();var exception = errorFeature.Exception; } }); } }

对于我们的用例,我们需要确保在转发请求之前正确地设置了标头。这是通过下面的CustomProxyTransformer类完成的:

public class CustomProxyTransformer: HttpTransformer {public override async ValueTask TransformRequestAsync(HttpContext HttpContext, HttpRequestMessage proxyRequest, string destinationPrefix){//复制所有请求头await base。TransformRequestAsync(httpContext, proxyRequest, destinationPrefix);var queryContext = new QueryTransformContext(httpContext.Request);proxyRequest.Headers.Host = "newurl.customhostheader.com";proxyRequest。RequestUri = RequestUtilities。MakeDestinationAddress(“https:// newurl.customhostheader.com”,httpContext.Request。路径,queryContext.QueryString);}}

这就是让反向代理启动并运行所需要的一切。希望Optimizely能够通过配置将反向代理添加到DXC中。但在此之前,YARP是CMS 12中反向代理的一个很好的权宜之计。

留言回复

您的电邮地址将不会公布。必填项已标记

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据

大卫•刘易斯Director -优化CMS

更多来自作者

类别
关注我们
推特 Linkedin 脸谱网 Youtube Instagram