Fichiers de configuration
Chargez les routes et les clusters depuis appsettings.json ou toute autre source IConfiguration, et laissez le proxy détecter automatiquement les changements sans redémarrage.
Chargement de la configuration
YARP peut charger ses routes et ses clusters depuis n'importe quelle source IConfiguration - appsettings.json dans les exemples ci-dessous, mais n'importe quel fournisseur fonctionne de la même manière. Le proxy relit la configuration et applique les changements automatiquement à chaque modification de la source, sans redémarrage nécessaire.
Program.cs
Enregistre le proxy à partir de la section « ReverseProxy » de la configuration.
C#using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();La configuration peut être modifiée pendant son chargement, avant d'être validée et appliquée - consultez Filtres de configuration.
Structure de la configuration
La section nommée passée à LoadFromConfig - "ReverseProxy" ci-dessus - contient deux sous-sections : Routes et Clusters.
JSON{
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}",
"Hosts": ["www.aaaaa.com", "www.bbbbb.com"]
}
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"cluster1/destination1": { "Address": "https://example.com/" }
}
}
}
}
}Routes
Routes est une collection non ordonnée d'entrées de route, chacune nécessitant au minimum :
RouteId— un nom unique pour la route.ClusterId— le nom d'une entrée dansClustersvers laquelle sont envoyées les requêtes correspondant à cette route.Match— un tableauHosts, un modèlePath(un modèle de route ASP.NET Core), ou les deux.
Lorsque plusieurs routes peuvent correspondre à une même requête, c'est la route la plus spécifique qui l'emporte - consultez Routage basé sur les en-têtes pour le détail du mécanisme de priorité, ou définissez un Order explicite (les valeurs les plus basses l'emportent) pour le contrôler directement. Les en-têtes, l'autorisation, CORS et d'autres stratégies par requête peuvent également être définis sur une entrée de route.
Clusters
Clusters est une collection non ordonnée de clusters nommés. Chaque cluster contient un ensemble de Destinations nommées - des adresses backend considérées capables de traiter les requêtes pour toute route qui pointe vers ce cluster. Une fois qu'une route a trouvé une correspondance, la stratégie d'équilibrage de charge du cluster détermine quelle destination reçoit effectivement la requête - consultez Équilibrage de charge.
Plusieurs sources de configuration
LoadFromConfig peut être appelé plusieurs fois, en pointant vers différentes sections ou même différents fournisseurs - combinez-le avec un fournisseur de configuration personnalisé qui charge depuis une tout autre source :
C#services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy1"))
.LoadFromConfig(Configuration.GetSection("ReverseProxy2"));Une route définie dans une source peut référencer un cluster défini dans une autre. Ce qui n'est pas pris en charge, c'est la fusion d'une configuration partielle pour une même route ou un même cluster à partir de deux sources - chacune doit provenir intégralement d'une seule source.
Toutes les propriétés de configuration
Une seule route et un cluster entièrement spécifié, présentant ensemble toutes les propriétés de premier niveau :
Forme de référence complète
La plupart des champs sont facultatifs ; seuls RouteId/ClusterId/Match pour une route et Destinations pour un cluster sont obligatoires. HealthCheck, SessionAffinity et HttpClient/HttpRequest ont chacun leur propre page dédiée - consultez Vérifications d'intégrité des destinations, Affinité de session et Configuration du client HTTP.
JSON{
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "cluster1",
"Order": 100,
"MaxRequestBodySize": 1000000,
"AuthorizationPolicy": "Anonymous",
"CorsPolicy": "Default",
"Match": {
"Path": "/something/{**remainder}",
"Hosts": ["www.aaaaa.com", "www.bbbbb.com"],
"Methods": ["GET", "PUT"],
"Headers": [
{ "Name": "MyCustomHeader", "Values": ["value1", "value2"], "Mode": "ExactHeader" }
],
"QueryParameters": [
{ "Name": "MyQueryParameter", "Values": ["value1", "value2"], "Mode": "Exact" }
]
},
"Metadata": { "MyName": "MyValue" },
"Transforms": [{ "RequestHeader": "MyHeader", "Set": "MyValue" }]
}
},
"Clusters": {
"cluster1": {
"LoadBalancingPolicy": "PowerOfTwoChoices",
"Destinations": {
"cluster1/destination1": { "Address": "https://contoso.com" },
"cluster1/destination2": { "Address": "https://10.20.30.40", "Health": "https://10.20.30.40:12345/test" }
},
"SessionAffinity": { "Enabled": true, "Policy": "Cookie" },
"HealthCheck": {
"Active": { "Enabled": true, "Interval": "00:00:10", "Path": "/api/health" },
"Passive": { "Enabled": true, "Policy": "TransportFailureRateHealthPolicy" }
},
"HttpClient": { "SslProtocols": "Tls13", "MaxConnectionsPerServer": 1024 },
"Metadata": { "MyKey": "MyValue" }
}
}
}
}