C# 在Kubernetes中的nginx代理后面配置.Net内核

C# 在Kubernetes中的nginx代理后面配置.Net内核,c#,nginx,asp.net-core,kubernetes,C#,Nginx,Asp.net Core,Kubernetes,我无法让我的asp.net核心网站在Kubernetes的ngnix入口控制器后面工作。我可以查看该网站,但所有链接、css和图像都已断开 我的入口控制器看起来像这样 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: apps-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewr

我无法让我的asp.net核心网站在Kubernetes的ngnix入口控制器后面工作。我可以查看该网站,但所有链接、css和图像都已断开

我的入口控制器看起来像这样

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: apps-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: 
    http:
      paths:
      - path: /web(/|$)(.*)
        backend:
          serviceName: web-service
          servicePort: 80
      - path: /middle(/|$)(.*)
        backend:
          serviceName: middle-api-service
          servicePort: 80
我还将我的站点配置为使用转发头

 app.UseForwardedHeaders(new ForwardedHeadersOptions
 {
      ForwardedHeaders = ForwardedHeaders.All
 });
我可以浏览网站
{proxyaddress}/web
这会加载站点,但所有链接、css和图像在转到根代理地址时都会中断,而没有入口控制器的配置路径
/web

我确实输出了网站接收到的标题,我可以看到:

header X-Real-IP - val:  10.240.0.4         
header X-Forwarded-For - val:  10.240.0.4         
header X-Forwarded-Host - val:  {ProxyAddress}       
header X-Forwarded-Port - val:  443         
header X-Forwarded-Proto - val:  https        
header X-Original-URI - val:  /web/        
header X-Scheme - val:  https     
我可以看到标题
X-Original-URI
的值为
/web
,我的网站需要将其用作所有链接的基础

我已经尝试了
app.UsePathBase(“/web”)


似乎什么都不起作用,我在网上找不到任何关于我需要设置什么才能使网站在代理配置的
/web
路径下工作的信息?

我找到了答案,因为我使用的是基于
/web
的nginx代理的路径

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: apps-ingress
  labels:
    name: apps-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: 
    http:
      paths:
      - path: /web
        backend:
          serviceName: web
          servicePort: 80
      - path: /middle
        backend:
          serviceName: middle-api
          servicePort: 80
与重写目标以使控制器不会在asp.net core应用程序中返回404不同,您需要保持路径与
/web

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: apps-ingress
  labels:
    name: apps-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: 
    http:
      paths:
      - path: /web
        backend:
          serviceName: web
          servicePort: 80
      - path: /middle
        backend:
          serviceName: middle-api
          servicePort: 80
然后在“应用程序配置”部分将路径基配置为等于
/web

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (!String.IsNullOrEmpty(Configuration["PathBase"]))
                app.UsePathBase(Configuration["PathBase"]);
我还必须在应用程序中添加一个环境变量,这样就可以配置
/web
,因为我无法在应用程序启动时访问
X-Original-URI
标题