Настроить .Net Core за прокси-сервером nginx в Kubernetes - PullRequest
1 голос
/ 01 июля 2019

Я не могу заставить свои основные веб-сайты asp.net работать за входным контроллером ngnix в Кубернетесе.Я могу просматривать сайт, но все ссылки, CSS и изображения не работают.

Мой контроллер Ingress выглядит следующим образом

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"); и

app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedForHeaderName = "X-Original-URI",
                OriginalForHeaderName = "X-Original-URI",
                OriginalHostHeaderName = "X-Original-URI",
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });

Кажется, ничего не работает, и я не могу найти в Интернете никакой информации о том, что мне нужно настроить, чтобы веб-сайт работал в соответствии с/web путь настроен прокси?

1 Ответ

1 голос
/ 02 июля 2019

Я нашел ответ, потому что я использую базу пути на прокси-сервере nginx /web

Вместо того, чтобы переписывать цель, чтобы контроллеры не возвращали 404 в asp.netБазовое приложение, вам нужно оставить путь таким, как он есть с /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 при запуске приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...