Nginx入口重写目标中断到的链接.NET核心API



我有一个包含多个服务的设置,并且通过Ingress/Terraform/Kubernetes设置运行。目前,我所有的Vue。JS应用程序是通过NGINX提供服务的,但是当我添加以下行"nginx.ingress.kubernetes.io/rewrite-target": "/$1"以确保我的其他路由(如/前端和/后端(工作时,它破坏了我的API,我无法再通过/api/访问它

Terraform设置:

resource "kubernetes_ingress" "ingress" {
metadata {
name      = "ingress"
namespace = var.namespace_name
annotations = {
"nginx.ingress.kubernetes.io/force-ssl-redirect" = true
"nginx.ingress.kubernetes.io/from-to-www-redirect" = true
"nginx.ingress.kubernetes.io/ssl-redirect": true
"nginx.ingress.kubernetes.io/add-base-url": false
"nginx.ingress.kubernetes.io/rewrite-target": "/$1"
"kubernetes.io/ingress.class": "nginx"
"ncp/use-regex": true
}
}
spec {
tls {
hosts = [var.domain_name, "*.${var.domain_name}"]
secret_name = "tls-secret"
}
rule {
host = var.domain_name
http {
path {
path = "/(.*)"
backend {
service_name = "frontend"
service_port = 80
}
}
path {
path = "/api(.*)"
backend {
service_name = "api"
service_port = 80
}
}
path {
path = "/backend(.*)"
backend {
service_name = "backend"
service_port = 80
}
}
path {
path = "/payment(.*)"
backend {
service_name = "payment"
service_port = 80
}
}
}
}
}
wait_for_load_balancer = true
}

我的Startup.cs配置

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "OLC API V1");
});
app.UseCors(AllowSpecificOrigins);
app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

terraform设置似乎适用于我所有的vue.js容器。唯一的问题是API不再可访问。甚至没有通过/api/api,比如这个问题中的

我试着只重写特定的路线,并更改应用程序,以便在不同的路线上服务,但我仍然遇到404错误。即使在创建响应/路由的控制器时也是如此。当移除重写目标行时,API确实起作用。但是Vue。JS容器不

事实证明,这只是一个正则表达式问题,我没有正确设置路径。我更改了以下内容。

path {
path = "/api(.*)"
backend {
service_name = "api"
service_port = 80
}
}

进入

path {
path = "/(api.*)"
backend {
service_name = "olc-api"
service_port = 80
}
}

有了这个,它将/api与我的匹配。NET核心应用程序,而不是试图在vue.js容器中找到URL

最新更新