Ошибка выполнения при доступе к виртуальному каталогу IIS на другом сервере через папку localhost /

У нас есть 2 сервера. На server1 в конфигурации IIS есть виртуальный каталог, в котором есть HTML-страница URL-адреса.

В конфигурации IIS server2 виртуальный каталог указывает на каталог на server1 (тот же каталог, настроенный на server1).

при доступе к URL-адресу с помощью localhost на сервере server1 отображается общая ошибка, указанная в файле конфигурации, тогда как при доступе к URL-адресу с помощью localhost на сервере server2 отображается ошибка времени выполнения (указанная ниже), хотя она указывает на ту же конфигурацию, на которую указывает сервер 1. Между серверами нет проблем с доступом.

Ошибка сервера в приложении "/"

Ошибка выполнения:

Описание: исключение при обработке вашего запроса. Кроме того, еще одно исключение произошло при выполнении настраиваемой страницы ошибки для первого исключения. Запрос был прекращен.

Веб-конфигурация: -

<customErrors defaultredirect="GeneralErrorPage.htm" mode ="On">
<error statuscode="404" redirect="GeneralErrorPage.htm"/>
</customErrors>
  1. установить <customErrors mode="Off" /> и
  • Разместил URL-адрес на server1 как http: // localhost / покупатель / отображает общую ошибку
  • Разместил URL-адрес на server2 как http: // localhost / покупатель / отображает ошибку времени выполнения
  1. У покупателя виртуального каталога в IIS есть много страниц * .html. URL-адрес размещен на server1 и server2, поскольку http: //localhost/buyer/info.html отображает страницу пользовательского интерфейса с информацией о покупателе.

Совершенно очевидно, что server2 не имеет проблем при доступе к покупателю каталога на server1.

  <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
         
            <httpErrors errorMode="Custom">
                <remove statusCode="404" subStatusCode="-1" />
                <remove statusCode="403" subStatusCode="-1" />
                <error statusCode="403" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="ExecuteURL" />
                <error statusCode="404" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="Redirect"  />
               
            </httpErrors>
            <directoryBrowse enabled="false" />
       </system.webServer>
    <system.web>

      <customErrors defaultRedirect="GeneralErrorPage.htm" mode="Off">
       <error statusCode="404" redirect="GeneralErrorPage.htm"/>
      </customErrors>

</system.web>
</configuration>

Примечание. Вручную, когда я добавляю html-страницы (GeneralErr.htm) к тому же URL-адресу http: //localhost/subtest/GeneralErr.htm, страница загружается успешно.

Но при размещении URL-адреса http: // localhost / subtest с сервера 2 возникает ошибка ниже - ошибка доступа или ошибка времени выполнения

Ошибка конфигурации Описание: произошла ошибка во время обработки файла конфигурации, необходимого для обслуживания этого запроса. Просмотрите приведенные ниже сведения о конкретных ошибках и соответствующим образом измените файл конфигурации.

Сообщение об ошибке парсера: произошла ошибка при загрузке файла конфигурации: не удалось начать мониторинг изменений в '\ server1 \ c $ \ test \ subtest' из-за отказа в доступе.

Что касается конфигурации IIS для виртуального каталога с использованием версии IIS8

В структуре папок Server1: c: \ test \ subtest

В Server2: конфигурация IIS для подтеста виртуального каталога Физический путь: \ server1 \ c $ \ test \ subtest Учетные данные физического пути: домен \ имя пользователя < strong> Виртуальный путь: / subtest


person Grace    schedule 19.10.2020    source источник
comment
Во-первых, вам нужно изменить webconfig в соответствии с подсказками об ошибках и установить ‹customErrors mode = Off /›, чтобы можно было отображать более подробные ошибки. Во-вторых, вы можете попробовать напрямую использовать URL-адрес для доступа к сайту на server1, чтобы вы могли определить, исходит ли проблема от server1 или server2. Наконец, включите отслеживание неудачных запросов на сервере, на котором возникла проблема.   -  person Bruce Zhang    schedule 20.10.2020
comment
Я изменил webconfig как ‹customErrors mode = Off /› и обновил выше. Но определить проблему не удалось ..   -  person Grace    schedule 21.10.2020
comment
@Bruce Zhang Любой ввод, необходимый для устранения ошибки   -  person Grace    schedule 21.10.2020
comment
После отключения пользовательского режима ошибок на странице должна отображаться подробная информация об ошибке. Вы должны найти проблему на основе подробной информации об ошибке. Трудно найти причину проблемы, просто просмотрев описание ошибки и файл конфигурации. В то же время вы также должны включить отслеживание неудачных запросов и анализировать журналы как на server1, так и на server2. Или используйте просмотр событий для просмотра ошибок.   -  person Bruce Zhang    schedule 22.10.2020
comment
@ Брюс Чжан: Я добавил заметку в основной ветке выше.   -  person Grace    schedule 23.10.2020


Ответы (1)


Ошибка 500.19, которую вы получаете в начале, аналогична тому, как в описании ошибки говорится, что абсолютные пути не разрешены, но следует использовать относительные пути. Таким образом, вы можете установить относительный путь для решения этой проблемы или включить абсолютный путь в applicationhost, следуя подчеркнутой части конфигурации.

<httpErrors allowAbsolutePathsWhenDelegated="true" errorMode="Custom" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
  ...
</httpErrors>

Даже если относительный путь включен, все равно будут проблемы при доступе через localhsot / subtest.

Есть два способа решить эту проблему: один - изменить пул приложений на «Без управляемого кода» и «Классические настройки». Другой - изменить идентификатор пула приложений, установить для него пользователя с такими же разрешениями, что и у администратора, вы можете создать одного пользователя или напрямую использовать администратора.

person Bruce Zhang    schedule 26.10.2020
comment
В чем смысл выбора Без управления кодом в пуле приложений IIS? Повлияет ли изменение на приложение .NET? - person Grace; 27.10.2020
comment
Это связано с тем, будет ли IIS пытаться передавать входящие запросы обработчикам, использующим .NET Framework. При отключении управляемого кода среда CLR .NET Framework не загружается в процесс пула приложений, что может ускорить запуск и обработку запросов для приложений, использующих только обработчики, созданные с использованием собственного кода (например, классический ASP). Когда вы указываете версию .NET CLR как 4.0 для пула приложений, IIS пытался загрузить в свои рабочие процессы некоторые вспомогательные библиотеки ASP.NET. Это увеличивает использование памяти и поверхность атаки, а также может иметь другие последствия. - person Bruce Zhang; 28.10.2020