Вы можете запускать приложения Node.js в Windows с добавленным слоем обратного прокси со встроенным менеджером веб-сервисов IIS. Вместе с менеджером процессов, таким как PM2, это жизнеспособная стратегия запуска приложений для производства.

Зачем использовать обратный прокси?

Наличие выделенного веб-сервера, такого как IIS, для обработки ваших HTTP-запросов упрощает управление и позволяет использовать стандартные функции веб-сервера, такие как завершение SSL, сжатие и балансировка нагрузки. Для получения дополнительной информации я рекомендую пост Томаса Хантера II «Зачем мне использовать обратный прокси, если Node.js готов к производству?»

Еще одним большим преимуществом является возможность перенаправлять трафик на соответствующие веб-службы с помощью правил URL. Давайте рассмотрим это последнее преимущество подробнее.

Запустите веб-службу Node.js

Если у вас уже есть работающее приложение Node.js, которое вы хотите использовать, вы можете пропустить этот шаг. В противном случае давайте создадим действительно простой веб-сервер Node.js, который будет отвечать на HTTP-запросы.

  1. Создайте новый каталог и инициализируйте в нем проект npm. Убедитесь, что имя каталога имеет смысл по отношению к имени приложения. В данном случае мы просто делаем простое тестовое приложение.
mkdir testapp
cd testapp
npm init -y

2. Установите Фастфай. Это быстрый и недорогой веб-фреймворк для Node.js.

npm i fastify

3. Создайте файл с именем server.js со следующим содержимым.

const fastify = require("fastify")({ logger: true });
fastify.get("/", async () => {
  return { hello: "world" };
});
const start = async () => {
  try {
    await fastify.listen(process.env.PORT || 3000);
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};
start();

4. Запустите сервер и проверьте, правильно ли он отвечает в вашем браузере. По умолчанию он будет прослушивать порт 3000.

node server

Управляйте своими веб-сервисами Node.js с помощью PM2

Опять же, если вы уже позаботились об этой части, вы можете пропустить этот шаг. В противном случае давайте будем управлять нашими услугами с помощью PM2. PM2 — это расширенный менеджер процессов для производственных приложений Node.js.

  1. Убедитесь, что вы завершите все запущенные процессы Node.js, такие как тот, который мы начали в предыдущем разделе.

2. Установите PM2.

npm i -g pm2

3. Создайте файл конфигурации PM2 с именем ecosystem.config.js в подходящем месте. Это может быть в корне вашего сервера или в вашем пользовательском каталоге. Этот файл будет содержать конфигурацию для всех ваших веб-приложений Node.js.

module.exports = {
  apps: [
    {
      name: "Test App",
      script: "path/to/testapp/server.js",
      env: {
        PORT: 3000,
      },
    },
  ],
};

Вы можете разместить здесь столько приложений, сколько необходимо. Убедитесь, что все они имеют разные значения PORT. Я рекомендую называть каждое приложение чем-то полезным, что соответствует имени каталога приложения. Это упрощает управление.

4. Запустите PM2 и запустите приложения, используя конфигурацию экосистемы.

pm2 start ecosystem.config.js

Запустив приложение, вернитесь в веб-браузер и убедитесь, что все работает.

Стоит отметить, что каждый раз, когда вы вносите изменения в ecosystem.config.js, например, когда создаете новое приложение Node.js и добавляете его в список, вы можете перезагрузить конфигурацию.

pm2 reload ecosystem.config.js

Включите информационные службы Интернета

Запуск такого приложения прекрасно работает, но в идеале вам нужен выделенный веб-сервер, такой как IIS, для обработки ваших HTTP-запросов по всем причинам, упомянутым ранее в этом посте. Здесь мы настроим перенаправление трафика на соответствующие веб-службы Node.js с помощью правил URL.

IIS — это продукт веб-сервера от Microsoft, который вы можете включить в Windows 10.

  1. Нажмите кнопку Пуск или нажмите клавишу Windows. Введите «Включить или отключить функции Windows» и нажмите Enter. Появится окно Компоненты Windows.

2. Установите флажок Информационные службы Интернета. Поле будет заполнено квадратом, указывающим на то, что некоторые объекты внутри него выбраны. Функции, выбранные по умолчанию, в порядке. Поэтому просто нажмите ОК.

Убедитесь, что IIS запущен и работает, запустив веб-браузер и перейдя по адресу http://localhost. Если сайт похож на показанный ниже, значит, вы в деле.

Установите маршрутизацию запросов приложений и перезапись URL-адресов

Эти два продукта от Microsoft необходимы для использования IIS в качестве обратного прокси-сервера.

  1. Нажмите кнопку Пуск или нажмите клавишу Windows. Введите «Установщик Microsoft Web Platform» и нажмите Enter.
  2. Если появится окно Контроль учетных записей пользователей, нажмите Да. Появится окно Установщик веб-платформы.

3. В поле поиска в правом верхнем углу введите «Маршрутизация запросов приложений» и нажмите Ввод.

4. Нажмите кнопку Добавить в строке Маршрутизация запросов приложений 2.5 с KB2589179. Если есть более новая версия, вы можете выбрать ее, но это та, с которой я знаком.

5. Вернувшись в поле поиска, введите «Переписать URL» и нажмите Ввод.

6. Нажмите кнопку Добавить в строке URL Rewrite 2.1.

7. Нажмите кнопку Установить.

Настройка правила перезаписи URL

  1. Откройте Диспетчер IIS, нажав Пуск или нажав клавишу Windows, введя «Internet Information Services» и нажав Enter. Появится окно менеджера.

2. На панели Подключения нажмите стрелку рядом с именем вашего ПК, а затем стрелку рядом с пунктом Сайты. Наконец, нажмите Веб-сайт по умолчанию, чтобы выбрать его.

3. Дважды щелкните Переписать URL, чтобы открыть его функции. Вероятно, по умолчанию не будет никаких правил.

4. На панели Действия справа нажмите Добавить правило(я)…

5. Нажмите, чтобы выбрать Обратный прокси, а затем нажмите ОК.

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

6. Введите имя сервера или IP-адрес, на который будут пересылаться HTTP-запросы. Это где ваш сервер Node.js слушает. Если вы настроите свою среду в соответствии с этим руководством, это будет localhost:3000. Вы можете оставить остальные параметры по умолчанию и нажать ОК.

Мы почти закончили. Сохранив это правило, IIS будет проксировать любой трафик, направляющийся от localhost к localhost:3000. Вы можете проверить это в своем веб-браузере.

Обратите внимание, что на этот раз нам не нужно было указывать порт.

Это замечательно, за исключением случаев, когда у вас запущено несколько приложений Node.js и вы хотите направить пользователей к правильному на основе URL-адреса, который они посещают. В нашем случае мы хотим, чтобы любой пользователь, посещающий http://localhost/testapp, видел наше тестовое приложение Node.js.

7. Чтобы упростить управление, давайте дадим этому правилу имя. Нажмите, чтобы выбрать только что созданное правило, затем нажмите Переименовать в разделе Правила для входящих подключений справа.

Назовите его «Тестовое приложение» или как-нибудь еще. Я рекомендую назвать его точно так же, как имя в вашей конфигурации PM2.

8. Не снимая выделения с правила, нажмите Изменить… в разделе Правила для входящих подключений справа.

9. В поле Шаблон введите testapp/?(.*) и нажмите Применить. Вы можете заменить testapp на что угодно, но я рекомендую называть его так же, как каталог приложения Node.js, имя PM2 и правило перезаписи URL.

Теперь любой запрос к http://localhost/testapp и любые URL-адреса, расположенные глубже по этому пути, будут проксироваться в наше приложение Node.js.

Загрузите веб-браузер еще раз и проверьте его.