Напишу свой вариант работающий. Не на 100% подробно и может даже это не супер красиво и правильно, как изначально мечталось, но я думаю нубам со слабым английским поможет понять, в каком направлении думать. В противном случае подобные советы можно найти на стековерфлоу.
Решил сделать так: запускаю node процесс веб приложения + node процесс для его api (типа restful). (на 2 сайта будет 4 процесса и т.д.) Конечно в виде виндоус сервисов с помощью
https://nssm.cc/.
В IIS создаю сайт, задаю ему доменное имя, настаиваю 2 перенаправления на порты - 3004 для api и 3003 для веб приложения. Для этого в iis нужно поставить 2 приблуды:
www.iis.net/downloads/microsoft/application-reques...
www.iis.net/downloads/microsoft/url-rewrite
Потом, чтобы настроить rewrite - выбрать сайт и нажать на иконку [Url rewrite], после [Add rule] и выбрать reverse proxy, указать путь типа
http://localhost:3003
и ОК
IIS спросит про включение ARR, сказать да. После чего можно в web.config закинуть такой текст, должно заработать.
<configuration>
<system.webServer>
...
<rewrite>
<rules>
<clear />
<rule name="images">
<match url="photos/.*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="None" />
</rule>
<rule name="api" stopProcessing="true">
<match url="api\/.*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://localhost:3004/{R:0}" />
</rule>
<rule name="web" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://localhost:3003/{R:0}" />
</rule>
</rules>
</rewrite>
Основной запор, почему то был с IIS. Не ехал мопед, хотя там вроде все просто, гуглилось плохо, да и хз что именно не работало.
node процесс web приложения запускаете на порту 3003, в главном файле приложения прописан роутинг примерно такой
app.use('/', express.static(__dirname)); // не уверен, что это нужно
app.use('/js', express.static(__dirname + '/js')); // у меня express.js обрабатывает статику, мне показалось так проще, чем в iis настраивать, иначе на каждый запрос скрипта, стиля и т.д. iis будет пулять Index.html
app.use('/libs', express.static(__dirname + '/libs'));
app.use('/img', express.static(__dirname + '/img'));
app.use('/css', express.static(__dirname + '/css'));
app.use('/photos', express.static(config.photoPath)); // про фото не уверен, что именно работает - правило в iis или это
//во всех остальных случайх возвращается index.html со всеми js файлами spa приложения
app.all('/*', function (req, resp, next) {
resp.sendfile('index.html', {root: __dirname}); //если при таком подходе, вам в ответ на какие-либо запросы лезет этот index.html, значит либо rewrite в iss не заработал, либо обработка статики в экспрессе с ошибкой сделана.
});
node процесс с приложением, которое является api запускаете на порту 3004
В главном файле будет прописан роутинг на подобии:
app.use('/api/category', yourCategoryHandler);