2017-02-07 19 views
2

У меня есть веб-приложение .Net Core (MVC 6), работающее на Linux-машине через Kestrel, с NGINX, служащим прокси-сервером из порта 80 -> 5000 К сожалению, мне не разрешено использовать маршрут по умолчанию в другое приложение имеет приоритет, оба должны работать через порт 80, то есть запросы пересылаются, как:Маршрутизация приложения ASP.NET MVC с прокси-сервером NGINX

127.0.0.1 -> другое приложение

127.0.0.1/conf -> мое приложение

И в конфигурационном файле NGINX он определяется как:

 location /conf { 
     proxy_pass    http://127.0.0.1:5000; 
     proxy_cache_bypass  $http_upgrade; 
     proxy_set_header  Host $host; 
     proxy_http_version  1.1; 
     proxy_set_header  Upgrade $http_upgrade;    
     proxy_set_header  Connection keep-alive; 
     client_max_body_size 10m; 
     client_body_buffer_size 128k;    
     proxy_connect_timeout 90;    
     proxy_send_timeout  90;    
     proxy_read_timeout  90;    
     proxy_buffers   32 4k; 
    } 

Дело в том, что если я запускаю приложение с использованием стандартного местоположения (location /), маршрутизация приложения MVC выполняется нормально. Но наличие/conf, добавленное к прокси, просто прерывает маршрутизацию MVC, потому что приложение продолжает возвращать маршруты, основанные на корневом расположении, без префикса/conf. Поэтому после того, как пользователь получает целевую страницу по умолчанию, все маршруты (ссылки, действия) по-прежнему указывают на адрес, например 127.0.0.1/Home/About, вместо 127.0.0.1/conf/Home/About - и сделать это еще хуже, эти ссылки (/ conf/Home/About) также не работают.

Любые предложения о том, как мне приступить к решению этой проблемы? Если какой-либо префикс маршрута должен быть указан в приложении MVC на общем уровне (в настоящее время он использует только маршрут по умолчанию) или существует какое-то решение на основе NGINX (что было бы более предпочтительным)? Я пробовал работать в полтора дня и не смог найти подобную ситуацию, поэтому я очень признателен за любой вклад в это.

Спасибо!

ответ

0

У меня была точно такая же проблема.

Я не уверен, что это лучшее, что можно сделать, но я изменил путь, чтобы сделать его относительным. Вот как это выглядит:

<link href="~/lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" /> 
 

 
became 
 

 
<link href="lib/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />

и то же самое для изображений и скриптов.

Кроме того, я должен был изменить форму и ссылки, что означает:

<form asp-action="Index" method="get"> 
 

 
became 
 

 
<form action="./" method="get">

И

<a asp-action="Index" asp-route-SearchInput="@Model.SearchInput"> 
 

 
became 
 

 
<a href="./[email protected](Model.SearchInput)">

Я вроде потерять р ower asp tags, но это единственное, что я нашел, чтобы заставить его работать в этих условиях.

Надеюсь, это поможет