Подтвердить что ты не робот

Как разместить веб-приложение и API с одного и того же сервера, сохраняя их отдельно?

Скажем, у нас есть 2 отдельных приложения, приложение Web Api и приложение MVC, написанные в .NET 4.5. Если вы должны были разместить приложение MVC в IIS под заголовком хоста "https://www.mymvcapp.com/", можно было бы разместить приложение Web Api отдельно в IIS под заголовком хоста "https://www.mymvcapp.com/api/"

Процессы, выполняющие 2 приложения в IIS, должны быть отдельными. Я знаю отдельные методы хостинга, самостоятельного хостинга и хостинга с использованием IIS. Я хотел бы использовать IIS, если это вообще возможно.

Кроме того, как бы я мог разместить два приложения (API и веб-приложение), если каждый из них был на отдельном сервере, чтобы я мог обслуживать api из http://www.mymvcapp.com/api?

4b9b3361

Ответ 1

Существует не менее 4 способов делать то, что вы хотите сделать. Первые два метода: если у вас есть 1 веб-сервер, и оба приложения обслуживаются с одного веб-сервера, на котором работает IIS. Этот метод также работает, если у вас есть несколько веб-серверов, работающих за балансировщиком нагрузки, при условии, что API и веб-сайт работают на одном сервере.

Вторые два метода используют то, что называется "Обратный прокси", по существу способ маршрутизации трафика с одного сервера (прокси-сервера) на несколько внутренних серверов в зависимости от того, какой тип трафика вы получаете. Это происходит, когда вы запускаете свои веб-серверы на множестве серверов и запускаете свой API на другом сервере. Вы можете использовать любое обратное прокси-программное обеспечение, которое вы хотите, я упоминаю nginx и HAProxy, потому что я использовал оба в прошлом.

Единый веб-сервер с IIS

В IIS есть два способа:

Если ваша структура физических папок выглядит следующим образом:

c:\sites\mymvcapp
c:\sites\mymvcapp\api

Вы можете сделать следующее:

Создать дочернее приложение

Создание дочернего приложения позволит вашему сайту "API" достигать от www.mymvcapp.com/api без каких-либо изменений маршрутизации.

Для этого:

  • Откройте диспетчер IIS
  • Нажмите на соответствующий сайт в дереве папок "Сайты" слева.
  • Щелкните правой кнопкой мыши папку API
  • нажмите "Преобразовать в приложение"

Недостатком является то, что все дочерние приложения наследуют веб-конфигурацию своего родителя, и если у вас есть конфликтующие настройки, вы увидите некоторую странность (если она вообще работает).

Создать каталог Junction

Второй способ - это сделать так, чтобы приложения сохраняли свою обособленность; и снова вам не нужно выполнять маршрутизацию.

Предполагая две структуры папок:

c:\sites\api
c:\sites\mvcapp

Вы можете настроить Junctions в Windows. Из командной строки *:

cd c:\sites
mklink /D /J mymvcapp c:\sites\mvcapp
cd mymvcapp
mklink /D /J api c:\sites\api

Затем перейдите в диспетчер IIS и преобразуйте оба приложения в приложения. Таким образом, API будет доступен в \api\, но на самом деле не будет совместно использовать его настройки web.config с родительским.

Несколько серверов

Если вы используете nginx или haproxy в качестве обратного прокси, вы можете настроить его для маршрутизации вызовов для каждого приложения.

Настройки обратного прокси nginx

В вашем nginx.conf(лучше всего создать sites-enabled conf, символическую ссылку на sites-available, и вы можете уничтожить эту символическую ссылку при развертывании):

location / {
    proxy_pass http://mymvcapp.com:80
}
location /api {
    proxy_pass http://mymvcapp.com:81
}

а затем вы установите правильные настройки IIS, чтобы каждый сайт прослушивал порты 80 (mymvcapp) и порты 81 (api).

HAProxy

acl acl_WEB hdr_beg(host) -i mymvcapp.com
acl acl_API path_beg -i /api

use_backend API if acl_API
use_backend WEB if acl_WEB

backend API
server web mymvcapp.com:81

backend WEB
server web mymvcapp.com:80

* Я выписываю команду Junction из памяти; Я сделал это несколько месяцев назад, но не недавно, поэтому дайте мне знать, есть ли проблемы с командой

NB: файлы конфигурации не предназначены для полных конфигурационных файлов - только для отображения настроек, необходимых для обратного проксирования. В зависимости от вашей среды могут быть установлены другие параметры.