Как установить ~ / путь в ядре Asp.net - PullRequest
0 голосов
/ 21 мая 2019

Этот ответ: https://stackoverflow.com/a/10469032/3958875 указывает, что ~/ в URL-адресах будет установлено в фактический корень приложения, если приложение находится в виртуальном каталоге.

Однако я могу 'Кажется, я не могу найти, как я могу установить этот путь / значение.

Например, у меня есть приложение за обратным прокси-сервером nginx, поэтому корень приложения находится здесь: www.mywebsite.com/app1/

Поэтому я хочу, чтобы все ~/ были расширены до app1/.Как мне это сделать?

Я пытался app.UsePathBase("/app1"); в методе Configure в Startup.cs, который, похоже, ничего не делал.

Моя конфигурация nginx выглядит следующим образом:

server {
  server_name: apps.mywebsite.com
  location / {
    ...
  }
  location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:5000/;
  }
  #Https stuff ...
}

Мне не хватает чего-то, что я могу передать asp.net из nginx?

Ответы [ 2 ]

1 голос
/ 21 мая 2019

~ расширится до корня контента. Это фактически база пути, настроенная для входящего запроса.

Что app.UsePathBase() делает, так это сообщает приложению, что , когда входящий запрос начинается с указанного префикса, тогда он будет использоваться в качестве базы пути. Так что в вашем случае, когда входящий запрос начинается с /app1, тогда /app1 будет основой пути, а ~ будет расширен до /app1.

Если вы посмотрите на конфигурацию обратного прокси-сервера, вы увидите, что путь /app1 фактически не передается приложению:

location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:5000/;
}

Таким образом, при доступе к странице на /app1/foo путь запроса, который передается приложению, будет просто /foo. Таким образом, база путей /app1 не видна приложению, и она не сможет ответить соответствующим образом.

Вместо этого вам нужно передать полный путь к приложению. Затем вы используете app.UsePathBase(), чтобы сконфигурировать эту базу путей, чтобы она правильно интерпретировалась:

location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:5000/app1/;
}
app.UsePathBase("/app1");

Теперь входящие запросы на /app1/foo будут преобразовываться в тот же путь в вашем приложении, будет использоваться база путей /app1, и ~ должен должным образом расширяться до /app1.

0 голосов
/ 21 мая 2019

Оказывается, ошибка действительно в моей конфигурации nginx.

Следуя документации по asp и nginx здесь: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2

Я изменил свою конфигурацию nginx на:

...
    location /app1/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
...

И ~ правильно расширены.

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