Настройка IIS для работы с NodeJS

Установка NodeSJ

Настройка NodeJS проходит в обычном режиме:

  • Скачиваем дистрибутив: https://nodejs.org/uk/
  •  Устанавливаем NodeJS.

Установка URL Rewrite

  1. Жмем «Пуск» и запускаем утилиту Windows Web Platform Installer.
  2. В строке поиска вводим “url rewrite”. Будет найдено расширение URL Rewrite. Жмем кнопку «Установить».
  3. Расширение появляется в списке установленных:

Установка IISNode

  1. Скачиваем файл iisnode-full-v0.2.21-x64.msi  с IISNode для 64 битной версии по этой ссылке: https://github.com/tjanczuk/iisnode.
  2. Устанавливаем расширение в папку по умолчанию. C:\Program Files\iisnode\
  3. Инсталляция содержит файл setupsamples.bat, который создает тестовый сайт с примерами конфигураций в пределах сайта по умолчанию. Папка WWW этого сайта лежит в C:\Program Files\iisnode\www\ Запускать или не запускать BAT файл – на ваше усмотрение. Если что – можно просто посмотреть содержимое папок и файлы конфигурации.
  4. Обязательно! Выставляем права на запись в папку сайта в котором будет работать iisnode для пользователя IIS_IUSRS

Установка сертификатов HTTPS

  1. Генерируем заявку на создание сертификата в разделе IIS Manager Server Certificates.
  2. Получив сгенерированный запрос на генерацию сертификата отправляем нужным людям и в ответ получаем готовый сертификат безопасности.
  3. Прописываем его на сервере. Переходим в раздел IIS Manager/Server Certificates/Complete Certificate Request.

Настройка IIS под использование NodeJS, HTTPS

Создаем сайт. Например, mycoolapi.com.

  1. Запускаем IIS Manager
  2. На разделе Sites кликаем правой кнопкой и выбираем Add Website.
  3. Прописываем папку, где будет лежать содержимое сайта. По умолчанию исходная папка – c:\inetpub. Создаем в ней папку mycoolapi.com. Т.о. наш сайт и все его содержимое будет дить в папке c:\inetpub\ mycoolapi.com.

Привязываем порт HTTPS к вашему сайту:

  1. Разворачиваем список Sites.
  2. Выбираем наш сайт mycoolapi.com
  3. В правом меню выбираем bindings и прописываем https в настройках сайта имя нашего сайта и выбираем подгруженный сертификат:

Создаем правило автоматической переадресации с HTTP на HTTPS. 

Можно настраивать правила переадресации через IIS Manager, но проще будет открыть и отредактировать файл web.config, лежащий в корневой директории вашего сайта. Если такого файла нет, создаем его. Это правило перенаправит любой вход на ваш сайт через HTTP на HTTPS.
См. секцию: Правила URL Rewrite / Перенаправление на HTTPS

Перенаправляем все переходы на ваш сайт на конкретный JS файл.

См. Секцию: Перенаправление на HTTPS / Перенаправление любого URL на файл api.js и Обработчик iisnode

Конфигурируем IIS для работы с IISNode.

См. секцию Расширенная конфигурация iisnode. Значение ключей конфигурации смотрим в мануале к iisnode.

Файл конфигурации IIS WEB.CONFIG:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <!-- Обработчик iisnode -->
        <handlers>
                <add name="iisnode" path="api.js" verb="*" modules="iisnode" />
        </handlers>
        <!-- Правила URL Rewrite -->
        <rewrite>
            <rules>
                <!-- Перенаправление на HTTPS -->
                <rule name="Redirect to HTTPS" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$"  ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" />
                </rule>
                <!-- Перенаправление любого URL на файл api.js -->
                <rule name="sendToNode">
                    <match url="/*" />
                    <action type="Rewrite" url="api.js" />
                </rule>
            </rules>
        </rewrite>
        <!-- 
            Расширенная конфигурация iisnode 
            Если nodeProcessCountPerApplication = "0", 
            создает по экземпляру NodeJs на каждый процессор
        -->
  <iisnode 
   node_env="%node_env%"
   nodeProcessCountPerApplication="1" 
   maxConcurrentRequestsPerProcess="1024"
   maxNamedPipeConnectionRetry="100"
   namedPipeConnectionRetryDelay="250"
   maxNamedPipeConnectionPoolSize="512"
   maxNamedPipePooledConnectionAge="30000"
   asyncCompletionThreadCount="0"
   initialRequestBufferSize="4096"
   maxRequestBufferSize="65536" 
   watchedFiles="*.js;iisnode.yml" 
   uncFileChangesPollingInterval="5000"
   gracefulShutdownTimeout="60000" 
   loggingEnabled="true" 
   logDirectory="iisnode" 
   debuggingEnabled="true" 
   debugHeaderEnabled="false"
   debuggerPortRange="5058-6058" 
   debuggerPathSegment="debug" 
   maxLogFileSizeInKB="128" 
   maxTotalLogFileSizeInKB="1024" 
   maxLogFiles="20"
   devErrorsEnabled="true" 
   flushResponse="false" 
   enableXFF="false" 
   promoteServerVars="" 
   configOverrides=""
  />        
    </system.webServer>
</configuration>

Ошибки

В случае ошибки HTTP Error 500.19 - Internal Server Error:

Заходим в Feature Delegation и устанавливаем Handler Mappings в Read/Write,
перезапускаем сервер.

Ошибка записи логов

Во первых, следим за настройкой logDirectory. Она указывает куда модуль будет сбрасывать 
сообщения  о ошибках. Эту папку желательно вырести из каталога приложения и дать права 
на запись для пользователя IIS_IUSRS, под которым работает приложение сервера. Для этого
заходим в закладку Security свойств папки, добавляем этого пользователя, и даем ему права
на запись.

Комментарии

Популярные сообщения из этого блога

Kerberos и IIS OOS авторизация

Отладка Angular в VS Code