Ответ 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: файлы конфигурации не предназначены для полных конфигурационных файлов - только для отображения настроек, необходимых для обратного проксирования. В зависимости от вашей среды могут быть установлены другие параметры.