Как настроить web.config для нескольких виртуальных приложений в службе приложений Azure? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь, чтобы несколько приложений Node.js работали параллельно в одном экземпляре службы приложений Azure.Я пытался создать виртуальное приложение для каждого приложения Node.js, но постоянно получаю сообщение об ошибке сервера (код 500).Я использую ZipDeploy или Azure DevOps для развертывания моих приложений.

Я подозреваю, что проблема может быть в том, что файлы web.config , связанные с моими приложениями, неверны.

Вотнекоторые подробности моей настройки:

В меню Настройки приложения моего экземпляра службы приложений я перешел к настройкам Виртуальные приложения и каталоги и поставил следующее:

/                         site\wwwroot                        Application x
/mysite1                  site\wwwroot\mysite1                Application x
/mysite2                  site\wwwroot\mysite2                Application x

Моя wwwroot директория выглядит следующим образом.Чтобы убедиться, что проблема не в самом коде, я использовал одно и то же приложение Node.js для всех трех:

index.html
server.js
scripts
web.config (*)
----- mysite1
      |----- index.html
      |----- server.js
      |----- scripts
      |----- web.config (**)
----- mysite2
      |----- index.html
      |----- server.js
      |----- scripts
      |----- web.config (***)

Я использую файл web.config по умолчанию (, предоставленный Kudu) для трех из них:

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <system.webServer>

    <webSocket enabled="false" />
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
    </handlers>
    <rewrite>
      <rules>
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^server.js\/debug[\/]?" />
        </rule>

        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}"/>
        </rule>

        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
          </conditions>
          <action type="Rewrite" url="server.js"/>
        </rule>
      </rules>
    </rewrite>

    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin"/>
        </hiddenSegments>
      </requestFiltering>
    </security>

    <httpErrors existingResponse="PassThrough" />

  </system.webServer>
</configuration>

Используя эту конфигурацию, я могу достичь https://myappservice.azurewebsites.net/ без проблем, но https://myappservice.azurewebsites.net/mysite1 возвращает толькоошибка сервера.

Я попытался удалить обработчики из файлов web.config в подкаталогах (** и ***), как указано в аналогичных вопросах, но безрезультатно.

Какая правильная конфигурация для этих трех файлов?Я предполагаю, что правила перезаписи должны быть скорректированы, но я не уверен, каково точное ожидаемое значение для каждого.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Мне, наконец, удалось точно определить точную проблему с помощью журналов IIS ( / LogFiles / W3SVC ... / на Kudu):

ModuleName="RewriteModule", Notification="SEND_RESPONSE", HttpStatus="500", HttpReason="URL Rewrite Module Error.", HttpSubStatus="52", ErrorCode="Cannot create a file when that file already exists.
 (0x800700b7)", ConfigExceptionInfo="\\?\D:\home\site\wwwroot\mysite1\web.config ( 16) :Cannot add duplicate collection entry of type 'rule' with unique key attribute 'name' set to 'NodeInspector'
"

Что нужно было изменить, так этоимена обработчиков и правил в дочернем файле web.config, чтобы они не конфликтовали с именами в родительском файле web.config.Теперь все работает правильно.

0 голосов
/ 13 февраля 2019

Вы можете изменить настройки виртуальных приложений и каталогов, как показано ниже:

/                         site\wwwroot                Application x
/mysite1                  site\mysite1                Application x
/mysite2                  site\mysite2                Application x

При развертывании с помощью zipdeploy или DevOps имя сайта и URL-адрес назначения будут выглядеть следующим образом:

enter image description here

Для получения дополнительной информации см. Развертывание нескольких виртуальных каталогов на одном веб-сайте Azure .

...