Размещение ASP.NET Core в Windows со службами IISHost ASP.NET Core on Windows with IIS

Автор Люк Латэм (Luke Latham)By Luke Latham

Поддерживаемые операционные системыSupported operating systems

Поддерживаются следующие операционные системы:The following operating systems are supported:

  • Windows 7 и более поздние версииWindows 7 or later
  • Windows Server 2008 R2 и более поздние версииWindows Server 2008 R2 or later

Сервер HTTP.sys (ранее назывался WebListener) не работает в конфигурации обратного прокси-сервера со службами IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Используйте сервер Kestrel.Use the Kestrel server.

Сведения о размещении в Azure см. в статье Развертывание приложений ASP.NET Core в Службе приложений Azure.For information on hosting in Azure, see Развертывание приложений ASP.NET Core в Службе приложений Azure.

Поддержка HTTP/2HTTP/2 support

HTTP/2 поддерживается в ASP.NET Core для следующих сценариев развертывания IIS:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • ВнутрипроцессноIn-process
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версииWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Требуемая версия .NET Framework: .NET Core версии 2.2 или более позднейTarget framework: .NET Core 2.2 or later
    • Подключение TLS 1.2 или более поздней версииTLS 1.2 or later connection
  • ВнепроцессноOut-of-process
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версииWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Подключения Edge используют протокол HTTP/2, но подключения к серверу Kestrel через обратный прокси-сервер выполняются по HTTP/1.1.Edge connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • Целевая платформа: неприменимо к развертываниям вне процесса, так как IIS полностью обрабатывает подключение HTTP/2.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
    • Подключение TLS 1.2 или более поздней версииTLS 1.2 or later connection

При внутрипроцессном развертывании и установленном подключении HTTP/2 HttpRequest.Protocol возвращает HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. При внепроцессном развертывании и установленном подключении HTTP/2 HttpRequest.Protocol возвращает HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

HTTP/2 поддерживается для внепроцессных развертываний, которые удовлетворяют следующим базовым требованиям:HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версииWindows Server 2016/Windows 10 or later; IIS 10 or later
  • Подключения Edge используют протокол HTTP/2, но подключения к серверу Kestrel через обратный прокси-сервер выполняются по HTTP/1.1.Edge connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
  • Целевая платформа: неприменимо к развертываниям вне процесса, так как IIS полностью обрабатывает подключение HTTP/2.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • Подключение TLS 1.2 или более поздней версииTLS 1.2 or later connection

Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Протокол HTTP/2 по умолчанию включен.HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Дополнительные сведения о настройке HTTP/2 для развертываний IIS см. в статье об HTTP/2 в IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Настройка приложенияApplication configuration

Включение компонентов IISIntegrationEnable the IISIntegration components

Обычно Program.cs вызывает CreateDefaultBuilder, чтобы начать настройку узла.A typical Program.cs calls CreateDefaultBuilder to begin setting up a host. CreateDefaultBuilder настраивает Kestrel в качестве веб-сервера и активирует интеграцию IIS, задавая базовый путь и порт для модуля ASP.NET Core:CreateDefaultBuilder configures Kestrel as the web server and enables IIS integration by configuring the base path and port for the ASP.NET Core Module:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Модуль ASP.NET Core создает динамический порт для назначения серверному процессу.The ASP.NET Core Module generates a dynamic port to assign to the back-end process. CreateDefaultBuilder вызывает метод UseIISIntegration, который принимает этот динамический порт и настраивает Kestrel для прослушивания по адресу http://localhost:{dynamicPort}/.CreateDefaultBuilder calls the UseIISIntegration method, which picks up the dynamic port and configures Kestrel to listen on http://localhost:{dynamicPort}/. Это переопределяет другие конфигурации URL-адресов, такие как вызовы UseUrls или API прослушивания Kestrel.This overrides other URL configurations, such as calls to UseUrls or Kestrel's Listen API. Таким образом, вызовы UseUrls или API Listen Kestrel при работе с этим модулем не требуются.Therefore, calls to UseUrls or Kestrel's Listen API aren't required when using the module. При вызове UseUrls или Listen Kestrel прослушивает порт, указанный при выполнении приложения без IIS.If UseUrls or Listen is called, Kestrel listens on the port specified when running the app without IIS.

Включите в зависимости приложения зависимость от пакета Microsoft.AspNetCore.Server.IISIntegration.Include a dependency on the Microsoft.AspNetCore.Server.IISIntegration package in the app's dependencies. Используйте ПО промежуточного слоя для интеграции IIS, добавив метод расширения UseIISIntegration в WebHostBuilder.Use IIS Integration middleware by adding the UseIISIntegration extension method to WebHostBuilder:

var host = new WebHostBuilder()
    .UseKestrel()
    .UseIISIntegration()
    ...

Оба метода, UseKestrel и UseIISIntegration, — обязательные.Both UseKestrel and UseIISIntegration are required. Код, вызывающий UseIISIntegration, не влияет на переносимость кода.Code calling UseIISIntegration doesn't affect code portability. Если приложение запускается не в IIS (например, запускается непосредственно в Kestrel), UseIISIntegration не работает.If the app isn't run behind IIS (for example, the app is run directly on Kestrel), UseIISIntegration doesn't operate.

Модуль ASP.NET Core создает динамический порт для назначения серверному процессу.The ASP.NET Core Module generates a dynamic port to assign to the back-end process. Метод UseIISIntegration принимает этот динамический порт и настраивает Kestrel для прослушивания адресу http://locahost:{dynamicPort}/.The UseIISIntegration method picks up the dynamic port and configures Kestrel to listen on http://locahost:{dynamicPort}/. Это переопределяет другие конфигурации URL-адресов, такие как вызовы UseUrls.This overrides other URL configurations, such as calls to UseUrls. Таким образом, при использовании этого модуля вызов UseUrls не требуется.Therefore, a call to UseUrls isn't required when using the module. При вызове UseUrls Kestrel прослушивает порт, указанный при выполнении приложения без IIS.If UseUrls is called, Kestrel listens on the port specified when running the app without IIS.

При вызове UseUrls в приложении ASP.NET Core 1.0 следует выполнять вызов до вызова UseIISIntegration, чтобы исключить перезапись порта, настроенного в модуле.If UseUrls is called in an ASP.NET Core 1.0 app, call it before calling UseIISIntegration so that the module-configured port isn't overwritten. В ASP.NET Core 1.1 соблюдать этот порядок вызовов не требуется, так как параметр модуля переопределяет UseUrls.This calling order isn't required with ASP.NET Core 1.1 because the module setting overrides UseUrls.

Дополнительные сведения о размещении см. в разделе Размещение в ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Параметры служб IISIIS options

Чтобы настроить параметры IIS, включите конфигурацию службы для IISOptions в ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. В примере ниже пересылка сертификатов клиентов в приложение с целью заполнения HttpContext.Connection.ClientCertificate отключена.In the following example, forwarding client certificates to the app to populate HttpContext.Connection.ClientCertificate is disabled:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
ПараметрOption Значение по умолчаниюDefault ПараметрSetting
AutomaticAuthentication true Если значение — true, ПО промежуточного слоя для интеграции IIS задает свойство HttpContext.User, которое прошло проверку подлинности Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Если значение — false, ПО промежуточного слоя только предоставляет идентификатор для HttpContext.User и отвечает на явные запросы защиты от AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Для работы AutomaticAuthentication необходимо включить в службах IIS проверку подлинности Windows.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Дополнительные сведения см. в статье о проверке подлинности Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Задает отображаемое имя для пользователей на страницах входа.Sets the display name shown to users on login pages.
ForwardClientCertificate true Если значение — true и если присутствует заголовок запроса MS-ASPNETCORE-CLIENTCERT, происходит заполнение HttpContext.Connection.ClientCertificate.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Сценарии использования прокси-сервера и подсистемы балансировки нагрузкиProxy server and load balancer scenarios

ПО промежуточного слоя для интеграции IIS, которое настраивает ПО промежуточного слоя переадресации заголовков, и модуль ASP.NET Core настраиваются на пересылку схемы (HTTP/HTTPS) и удаленного IP-адреса расположения, где был сформирован запрос.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Для приложений, размещенных за дополнительными прокси-серверами и подсистемами балансировки нагрузки, может потребоваться дополнительная настройка.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Файл web.configweb.config file

В файле web.config содержится конфигурация модуля ASP.NET Core.The web.config file configures the ASP.NET Core Module. Создание, преобразование и публикация файла web.config обрабатываются целевым объектом MSBuild (_TransformWebConfig) при публикации проекта.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Этот целевой объект присутствует в целевых веб-пакетах SDK (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). Пакет SDK задается в начале файла проекта:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Если в проекте нет файла web.config, он создается с соответствующими аргументами processPath и arguments для настройки модуля ASP.NET Core и переносится в опубликованные выходные данные.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Если в проекте есть файл web.config, он преобразуется с соответствующими аргументами processPath и arguments для настройки модуля ASP.NET Core и переносится в опубликованные выходные данные.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. Преобразование не изменяет параметры конфигурации служб IIS, включенные в файл.The transformation doesn't modify IIS configuration settings in the file.

Файл web.config может содержать дополнительные параметры конфигурации IIS, управляющие активными модулями IIS.The web.config file may provide additional IIS configuration settings that control active IIS modules. Сведения о модулях IIS, которые могут обрабатывать запросы к приложениям ASP.NET Core, см. в статье Модули IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Чтобы пакет SDK не преобразовывал файл web.config, добавьте в файл проекта свойство <IsTransformWebConfigDisabled>.To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Если пакет SDK не преобразует файл, аргументы processPath и arguments нужно задать вручную.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Дополнительные сведения см. в разделе Справочник по конфигурации модуля ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

Расположение файла web.configweb.config file location

Для создания обратного прокси-сервера между и сервером Kestrel и IIS файл web.config должен находиться в корневой папке с содержимым развернутого приложения (как правило, это основной путь приложения).In order to create the reverse proxy between IIS and the Kestrel server, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Это расположение соответствует физическому пути веб-сайта, указанному в службах IIS.This is the same location as the website physical path provided to IIS. Файл web.config требуется в корне приложения, чтобы разрешить публикацию нескольких приложений с помощью веб-развертывания.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

По физическому пути приложения находятся файлы с конфиденциальной информацией: <имя_сборки>.runtimeconfig.json, <имя_сборки>.xml (комментарии к XML-документации) и <имя_сборки>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Когда файл web.config присутствует и сайт запускается нормально, службы IIS не обрабатывают запросы к этим файлам.When the web.config file is present and and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Если файл web.config отсутствует, неправильно именован или не может настроить нормальный запуск сайта, службы IIS могут свободно передавать содержимое этих конфиденциальных файлов.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

Файл web.config должен постоянно находиться в развертывании, у этого файла должно быть правильное имя, и файл должен быть в состоянии настроить нормальный запуск сайта. Никогда не удаляйте файл web.config из развертывания в рабочей среде.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Конфигурация IISIIS configuration

Операционные системы семейства Windows ServerWindows Server operating systems

Включите роль сервера Веб-сервер (IIS) и настройте службы роли.Enable the Web Server (IIS) server role and establish role services.

  1. В меню Управление запустите мастер Добавить роли и компоненты или в окне Диспетчер серверов щелкните соответствующую ссылку.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. На этапе Роли сервера установите флажок Веб-сервер (IIS).On the Server Roles step, check the box for Web Server (IIS).

    Роль "Веб-сервер (IIS)" выбрана на странице "Выбор ролей сервера".

  2. После этапа выбора компонентов запускается этап выбора служб роли для веб-сервера (IIS).After the Features step, the Role services step loads for Web Server (IIS). Выберите нужные службы роли IIS или оставьте службы по умолчанию.Select the IIS role services desired or accept the default role services provided.

    Службы роли по умолчанию, выбранные на странице "Выбор служб ролей".

    Проверка подлинности Windows (необязательный компонент)Windows Authentication (Optional)
    Чтобы включить проверку подлинности Windows, разверните такие узлы: Веб-сервер > Безопасность.To enable Windows Authentication, expand the following nodes: Web Server > Security. Выберите компонент Проверка подлинности Windows.Select the Windows Authentication feature. Дополнительные сведения см. в статьях Windows Authentication <windowsAuthentication> (Проверка подлинности Windows ) и Configure Windows authentication in an ASP.NET Core app (Настройка проверки подлинности Windows в приложении ASP.NET Core).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    Протокол WebSocket (необязательный компонент)WebSockets (Optional)
    Протокол WebSocket поддерживается в ASP.NET Core начиная с версии 1.1.WebSockets is supported with ASP.NET Core 1.1 or later. Чтобы включить протокол WebSocket, разверните такие узлы: Веб-сервер > Разработка приложений.To enable WebSockets, expand the following nodes: Web Server > Application Development. Выберите компонент Протокол WebSocket.Select the WebSocket Protocol feature. Дополнительные сведения см. в разделе Протокол WebSocket.For more information, see WebSockets.

  3. Пройдите этап Подтверждение, чтобы установить роль и службы веб-сервера.Proceed through the Confirmation step to install the web server role and services. После установки роли Веб-сервер (IIS) перезагружать сервер или службы IIS не требуется.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Операционные системы Windows для настольных компьютеровWindows desktop operating systems

Включите компоненты Консоль управления IIS и Службы Интернета.Enable the IIS Management Console and World Wide Web Services.

  1. Последовательно выберите Панель управления > Программы > Программы и компоненты > Включение или отключение компонентов Windows (в левой части экрана).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Разверните узел Службы IIS.Open the Internet Information Services node. Разверните узел Средства управления веб-сайтом.Open the Web Management Tools node.

  3. Установите флажок Консоль управления IIS.Check the box for IIS Management Console.

  4. Установите флажок Службы Интернета.Check the box for World Wide Web Services.

  5. В группе Службы Интернета оставьте компоненты по умолчанию или настройте компоненты IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Проверка подлинности Windows (необязательный компонент)Windows Authentication (Optional)
    Чтобы включить проверку подлинности Windows, разверните такие узлы: Службы Интернета > Безопасность.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Выберите компонент Проверка подлинности Windows.Select the Windows Authentication feature. Дополнительные сведения см. в статьях Windows Authentication <windowsAuthentication> (Проверка подлинности Windows ) и Configure Windows authentication in an ASP.NET Core app (Настройка проверки подлинности Windows в приложении ASP.NET Core).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    Протокол WebSocket (необязательный компонент)WebSockets (Optional)
    Протокол WebSocket поддерживается в ASP.NET Core начиная с версии 1.1.WebSockets is supported with ASP.NET Core 1.1 or later. Чтобы включить протокол WebSocket, разверните такие узлы: Службы Интернета > Компоненты разработки приложений.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Выберите компонент Протокол WebSocket.Select the WebSocket Protocol feature. Дополнительные сведения см. в разделе Протокол WebSocket.For more information, see WebSockets.

  6. Если во время установки IIS потребуется перезагрузка, перезагрузите систему.If the IIS installation requires a restart, restart the system.

Группы "Консоль управления IIS" и "Службы Интернета" выбраны в окне "Компоненты Windows".


Установка пакета размещения .NET CoreInstall the .NET Core Hosting Bundle

  1. Установите пакет размещения .NET Core в размещающей системе.Install the .NET Core Hosting Bundle on the hosting system. В составе пакета устанавливаются среда выполнения .NET Core, библиотека .NET Core и модуль ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. Модуль создает обратный прокси-сервер между службами IIS и сервером Kestrel.The module creates the reverse proxy between IIS and the Kestrel server. Если система не подключена к Интернету, перед установкой пакета размещения .NET Core получите и установите Распространяемый компонент Microsoft Visual C++ 2015.If the system doesn't have an Internet connection, obtain and install the Microsoft Visual C++ 2015 Redistributable before installing the .NET Core Hosting Bundle.

    1. Перейдите на страницу загрузок .NET.Navigate to the .NET downloads page.
    2. В разделе .NET Core выберите Download .NET Core Runtime (Скачать среду выполнения .NET Core) рядом с пунктом Run Apps (Запуск приложений).Under .NET Core, select the Download .NET Core Runtime button next to the Run Apps label. В имени исполняемого файла установщика будет слово "hosting" (размещение), например: dotnet-hosting-2.1.2-win.exe.The installer's executable contains the word "hosting" in the file name (for example, dotnet-hosting-2.1.2-win.exe).
    3. Запустите установщик на сервере.Run the installer on the server.

    Важно!Important! Если пакет размещения устанавливается до установки служб IIS, его нужно восстановить.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. После установки служб IIS запустите установщик пакета размещения еще раз.Run the Hosting Bundle installer again after installing IIS.

    Чтобы запретить установщику установку пакетов x86 в операционной системе x64, запускать установщик следует из командной строки с правами администратора с параметром OPT_NO_X86=1.To prevent the installer from installing x86 packages on an x64 OS, run the installer from an administrator command prompt with the switch OPT_NO_X86=1.

  2. Перезагрузите систему или в командой строке выполните команду net stop was /y, а затем — команду net start w3svc.Restart the system or execute net stop was /y followed by net start w3svc from a command prompt. Перезапуск служб IIS позволит обнаружить внесенные установщиком изменения в системном пути, который является переменной среды.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

    Если установщик пакета размещения Windows обнаруживает, что для завершения установки требуется сброс IIS, установщик выполняет этот сброс.If the Windows Hosting Bundle installer detects that IIS requires a reset in order to complete installation, the installer resets IIS. Если установщик применяет сброс IIS, перезапускаются все пулы приложений и веб-сайты IIS.If the installer triggers an IIS reset, all of the IIS app pools and websites are restarted.

Примечание

Сведения об общей конфигурации IIS см. в разделе Модуль ASP.NET Core с общей конфигурацией IIS.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Установка веб-развертывания при публикации с помощью Visual StudioInstall Web Deploy when publishing with Visual Studio

При развертывании приложений на серверах с помощью веб-развертывания установите на сервере последнюю версию веб-развертывания.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Чтобы установить веб-развертывание, можно использовать установщик веб-платформы (WebPI) или получить установщик непосредственно в Центре загрузки Майкрософт.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. Предпочтительный метод — использовать WebPI.The preferred method is to use WebPI. WebPI обеспечивает автономную установку и настройку поставщиков размещения.WebPI offers a standalone setup and a configuration for hosting providers.

Создание сайта IISCreate the IIS site

  1. В размещающей системе создайте папку, в которой будут храниться файлы и папки опубликованного приложения.On the hosting system, create a folder to contain the app's published folders and files. Макет развертывания приложения описан в статье Directory structure of published ASP.NET Core apps (Структура каталогов опубликованных приложений ASP.NET Core).An app's deployment layout is described in the Directory Structure topic.

  2. В созданной только что папке создайте папку logs, в которой будут храниться журналы StdOut модуля ASP.NET Core (если включено ведение таких журналов).Within the new folder, create a logs folder to hold ASP.NET Core Module stdout logs when stdout logging is enabled. Если приложение развертывается с папкой logs в полезных данных, пропустите этот шаг.If the app is deployed with a logs folder in the payload, skip this step. Сведения о том, как в MSBuild настроить автоматическое создание папки logs при создании проекта локально, см. в статье Directory structure of published ASP.NET Core apps (Структура каталогов опубликованных приложений ASP.NET Core).For instructions on how to enable MSBuild to create the logs folder automatically when the project is built locally, see the Directory structure topic.

    Важно!

    Журнал StdOut следует использовать только для устранения ошибок, возникающих при запуске приложения.Only use the stdout log to troubleshoot app startup failures. Никогда не используйте журнал StdOut как журнал повседневных операций приложения.Never use stdout logging for routine app logging. Ни размер файла журнала, ни количество создаваемых файлов журналов ничем не ограничены.There's no limit on log file size or the number of log files created. Пул приложений должен иметь доступ на запись к папке, куда записываются журналы.The app pool must have write access to the location where the logs are written. Все папки в пути к папке журнала должны существовать.All of the folders on the path to the log location must exist. Дополнительные сведения о журнале StdOut см. в разделе о создании и перенаправлении журналов.For more information on the stdout log, see Log creation and redirection. Сведения о ведении журнала приложения ASP.NET Core см. в статье Общие сведения о ведении журналов в ASP.NET Core.For information on logging in an ASP.NET Core app, see the Logging topic.

  3. В окне Диспетчер служб IIS в области Подключения разверните узел сервера.In IIS Manager, open the server's node in the Connections panel. Щелкните правой кнопкой мыши папку Сайты.Right-click the Sites folder. В контекстном меню выберите пункт Добавить веб-сайт.Select Add Website from the contextual menu.

  4. Укажите имя в поле Имя сайта и задайте значение в поле Физический путь для созданной папки развертывания приложения.Provide a Site name and set the Physical path to the app's deployment folder. Укажите конфигурацию привязки и нажмите кнопку ОК, чтобы создать веб-сайт.Provide the Binding configuration and create the website by selecting OK:

    В окне "Добавить веб-сайт" укажите имя сайта, физический путь и имя узла.

    Предупреждение

    Не используйте привязки с подстановочными знаками (http://*:80/ и http://+:80) на верхнем уровне.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Это может создать уязвимость и поставить ваше приложение под угрозу.Top-level wildcard bindings can open up your app to security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки.This applies to both strong and weak wildcards. Вместо этого используйте имена узлов в явном виде.Use explicit host names rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например *.mysub.com) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com, создающего уязвимость).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Дополнительные сведения см. в документе rfc7230, раздел 5.4.See rfc7230 section-5.4 for more information.

  5. Разверните узел сервера и выберите Пулы приложений.Under the server's node, select Application Pools.

  6. Щелкните правой кнопкой мыши пул приложений сайта и в контекстном меню выберите пункт Основные параметры.Right-click the site's app pool and select Basic Settings from the contextual menu.

  7. В окне Изменение пула приложений задайте для параметра Версия среды CLR .NET значение Без управляемого кода.In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Выбор значения "Без управляемого кода" для параметра "Версия среды CLR .NET".

    ASP.NET Core выполняется в отдельном процессе и управляет средой выполнения.ASP.NET Core runs in a separate process and manages the runtime. Для ASP.NET Core не требуется загрузка классической среды CLR.ASP.NET Core doesn't rely on loading the desktop CLR. Задавать для параметра Версия среды CLR .NET значение Без управляемого кода необязательно.Setting the .NET CLR version to No Managed Code is optional.

  8. Убедитесь в том, что удостоверение модели процесса имеет соответствующие разрешения.Confirm the process model identity has the proper permissions.

    При изменении удостоверения по умолчанию для пула приложений (Модель процесса > Удостоверение) с ApplicationPoolIdentity на другое, убедитесь, что у нового удостоверения есть соответствующие разрешения для доступа к папке приложения, базе данных и другим необходимым ресурсам.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Например, пулу приложений требуются права на чтение и запись в папках, в которых приложение считывает и записывает файлы.For example, the app pool requires read and write access to folders where the app reads and writes files.

Настройка проверки подлинности Windows (необязательный этап)Windows Authentication configuration (Optional)
См. статью Configure Windows authentication in an ASP.NET Core app (Настройка проверки подлинности Windows в приложении ASP.NET Core).For more information, see Configure Windows authentication.

Развертывание приложенияDeploy the app

Разверните приложение в папке, созданной в размещающей системе.Deploy the app to the folder created on the hosting system. Рекомендуемый механизм развертывания — веб-развертывание.Web Deploy is the recommended mechanism for deployment.

Веб-развертывание с помощью Visual StudioWeb Deploy with Visual Studio

Сведения о создании профиля публикации для веб-развертывания см. в статье Профили публикации Visual Studio для развертывания приложений ASP.NET Core.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Если поставщик услуг размещения предоставляет профиль публикации или позволяет его создать, скачайте этот профиль и импортируйте его с помощью диалогового окна Публикация в Visual Studio.If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog.

Диалоговое окно "Публикация"

Веб-развертывание вне Visual StudioWeb Deploy outside of Visual Studio

Веб-развертывание можно также использовать вне Visual Studio с помощью командной строки.Web Deploy can also be used outside of Visual Studio from the command line. Дополнительные сведения см. в статье Средство веб-развертывания.For more information, see Web Deployment Tool.

Альтернативы веб-развертываниюAlternatives to Web Deploy

Переместить приложение в размещающую систему можно несколькими способами: с помощью копирования вручную, Xcopy, Robocopy или PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Дополнительные сведения о развертывании ASP.NET Core в службах IIS см. в разделе Ресурсы развертывания для администраторов IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Обзор веб-сайтаBrowse the website

Начальная страница IIS, загруженная в браузере Microsoft Edge.

Заблокированные файлы развертыванияLocked deployment files

Во время выполнения приложения файлы в папке развертывания блокируются.Files in the deployment folder are locked when the app is running. Заблокированные файлы невозможно перезаписать во время развертывания.Locked files can't be overwritten during deployment. Чтобы снять блокировку с файлов в развертывании, остановите пул приложений с помощью одного из следующих методов:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Запустите веб-развертывание и добавьте ссылку на Microsoft.NET.Sdk.Web в файл проекта.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Файл app_offline.htm помещается в корень каталога веб-приложения.An app_offline.htm file is placed at the root of the web app directory. Если файл присутствует, модуль ASP.NET Core корректно завершает работу приложения и обслуживает файл app_offline.htm во время развертывания.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Дополнительные сведения см. в разделе Справочник по конфигурации модуля ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

  • Вручную остановите пул приложений в диспетчере служб IIS на сервере.Manually stop the app pool in the IIS Manager on the server.

  • Используйте PowerShell для остановки и перезапуска пула приложений (требуется PowerShell 5 или более поздняя версия).Use PowerShell to stop and restart the app pool (requires PowerShell 5 or later):

    $webAppPoolName = 'APP_POOL_NAME'
    
    # Stop the AppPool
    if((Get-WebAppPoolState $webAppPoolName).Value -ne 'Stopped') {
        Stop-WebAppPool -Name $webAppPoolName
        while((Get-WebAppPoolState $webAppPoolName).Value -ne 'Stopped') {
            Start-Sleep -s 1
        }
        Write-Host `-AppPool Stopped
    }
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    if((Get-WebAppPoolState $webAppPoolName).Value -ne 'Started') {
        Start-WebAppPool -Name $webAppPoolName
        while((Get-WebAppPoolState $webAppPoolName).Value -ne 'Started') {
            Start-Sleep -s 1
        }
        Write-Host `-AppPool Started
    }
    

Защита данныхData protection

Стек защиты данных ASP.NET Core используют несколько ПО промежуточного слоя ASP.NET Core, включая ПО, которое применяется для аутентификации.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Даже если API-интерфейсы защиты данных не вызываются из пользовательского кода, защиту данных следует настроить для создания постоянного хранилища криптографических ключей. Это можно сделать с помощью скрипта развертывания или в пользовательском коде.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Если защита данных не настроена, ключи хранятся в памяти и удаляются при перезапуске приложения.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Если набор ключей хранится в памяти, при перезапуске приложения происходит следующее:If the key ring is stored in memory when the app restarts:

  • Все токены аутентификации, использующие файлы cookie, становятся недействительными.All cookie-based authentication tokens are invalidated.
  • При выполнении следующего запроса пользователю требуется выполнить вход снова.Users are required to sign in again on their next request.
  • Все данные, защищенные с помощью набора ключей, больше не могут быть расшифрованы.Any data protected with the key ring can no longer be decrypted. Это могут быть токены CSRF и файлы cookie временных данных ASP.NET Core MVC.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Чтобы настроить защиту данных в службах IIS для хранения набора ключей, воспользуйтесь одним из следующих методов:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Создание раздела реестра для защиты данных.Create Data Protection Registry Keys

    Ключи защиты данных, используемые приложениями ASP.NET Core, хранятся во внешнем для приложений реестре.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Чтобы хранить эти ключи для определенного приложения, нужно создать разделы реестра для пула приложений.To persist the keys for a given app, create registry keys for the app pool.

    При автономной установке служб IIS, не поддерживающей веб-ферму, можно выполнить скрипт PowerShell Provision-AutoGenKeys.ps1 для защиты данных (ASP.NET Core 2.2) применительно к каждому пулу приложений, в который входит приложение ASP.NET Core.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script (ASP.NET Core 2.2) can be used for each app pool used with an ASP.NET Core app. Этот скрипт создает раздел в реестре HKLM, который будет доступен только для учетной записи рабочего процесса пула приложений, к которому относится соответствующее приложение.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Неактивные ключи шифруются с помощью API защиты данных с ключом компьютера.Keys are encrypted at rest using DPAPI with a machine-wide key.

    В случаях, когда используется веб-ферма, в приложении можно настроить UNC-путь, по которому это приложение будет хранить набор ключей для защиты данных.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. По умолчанию ключи защиты данных не шифруются.By default, the data protection keys aren't encrypted. Разрешения на доступ к файлам в сетевой папке должны быть предоставлены только учетной записи Windows, с помощью которой выполняется приложение.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Для защиты неактивных ключей можно использовать сертификат X509.An X509 certificate can be used to protect keys at rest. Рассмотрите возможность реализации механизма, позволяющего пользователям отправлять сертификаты: поместить сертификаты в хранилище доверенных сертификатов пользователя и обеспечивать их доступность на всех компьютерах, где выполняется приложение.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Дополнительные сведения см. в разделе Настройка защиты данных в ASP.NET Core.See Configure ASP.NET Core Data Protection for details.

  • Настройка пула приложений IIS для загрузки профиля пользователя.Configure the IIS Application Pool to load the user profile

    Этот параметр находится на странице Дополнительные параметры пула приложений в разделе Модель процесса.This setting is in the Process Model section under the Advanced Settings for the app pool. Задайте для параметра "Загрузить профиль пользователя" значение True.Set Load User Profile to True. В результате ключи будут храниться в каталоге профиля пользователя, а их безопасность будет обеспечиваться за счет применения API защиты данных и ключа на уровне учетной записи пользователя, которую использует пул приложений.This stores keys under the user profile directory and protects them using DPAPI with a key specific to the user account used by the app pool.

  • Использование файловой системы в качестве хранилища набора ключей.Use the file system as a key ring store

    Измените код приложения так, чтобы в качестве хранилища набора ключей использовалась файловая система.Adjust the app code to use the file system as a key ring store. Для защиты набора ключей используйте доверенный сертификат X509.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Если сертификат — самозаверяющий, поместите его в доверенное корневое хранилище.If the certificate is self-signed, place the certificate in the Trusted Root store.

    При использовании служб IIS в веб-ферме:When using IIS in a web farm:

    • используйте общую папку, которая доступна всем компьютерам;Use a file share that all machines can access.
    • разверните сертификат X509 на каждом компьютере;Deploy an X509 certificate to each machine. настройте защиту данных в коде.Configure data protection in code.
  • Настройка политики защиты данных на уровне компьютера.Set a machine-wide policy for data protection

    Система защиты данных обеспечивает ограниченную поддержку задания политики по умолчанию на уровне компьютера для всех приложений, использующих интерфейсы API защиты данных.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Дополнительные сведения см. в документации по защите данных.See the data protection documentation for details.

Конфигурация дочерних приложенийSub-application configuration

Дочерние приложения, добавленные в корневое приложение, не должны включать в себя модуль ASP.NET Core в качестве обработчика.Sub-apps added under the root app shouldn't include the ASP.NET Core Module as a handler. Если модуль добавляется в качестве обработчика в файл web.config дочернего приложения, при попытке работы с этим приложением выводится ошибка 500.19 (внутренняя ошибка сервера) с указанием некорректного файла конфигурации.If the module is added as a handler in a sub-app's web.config file, a 500.19 Internal Server Error referencing the faulty config file is received when attempting to browse the sub-app.

Вот пример опубликованного файла web.config для дочернего приложения ASP.NET Core:The following example shows a published web.config file for an ASP.NET Core sub-app:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\<assembly_name>.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

При размещении дочернего приложения не на основе ASP.NET Core в приложении ASP.NET Core, нужно явным образом удалить унаследованный обработчик из файла web.config дочернего приложения.When hosting a non-ASP.NET Core sub-app underneath an ASP.NET Core app, explicitly remove the inherited handler in the sub-app web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\<assembly_name>.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Дополнительные сведения о настройке модуля ASP.NET Core см. в статье Введение в модуль ASP.NET Core Module и в справочнике по настройке модуля ASP.NET Core.For more information on configuring the ASP.NET Core Module, see the Introduction to ASP.NET Core Module topic and the ASP.NET Core Module configuration reference.

Настройка служб IIS с помощью файла web.configConfiguration of IIS with web.config

Раздел <system.webServer> файла web.config действует для тех компонентов IIS, которые относятся к конфигурации прокси-сервера.IIS configuration is influenced by the <system.webServer> section of web.config for those IIS features that apply to a reverse proxy configuration. Если в службах IIS на уровне сервера настроено динамическое сжатие, элемент <urlCompression> в файле web.config приложения может отключить это сжатие.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it.

Дополнительные сведения см. в справочнике по настройке <system.webServer>, справочнике по настройке модуля ASP.NET Core и статье Модули IIS с ASP.NET Core.For more information, see the configuration reference for <system.webServer>, ASP.NET Core Module Configuration Reference, and IIS Modules with ASP.NET Core. Сведения о настройке переменных среды для отдельных приложений, выполняющихся в изолированных пулах приложений (такая возможность поддерживается в службах IIS начиная с версии 10.0), см. в справочной документации по службам IIS, в частности в разделе AppCmd.exe статьи Environment Variables <environmentVariables> (Переменные среды ).To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Разделы конфигурации файла web.configConfiguration sections of web.config

Разделы конфигурации приложений ASP.NET 4.x в файле web.config не используются для конфигурации приложений ASP.NET Core.Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web><system.web>
  • <appSettings><appSettings>
  • <connectionStrings ><connectionStrings>
  • <location><location>

Для настройки приложений ASP.NET Core используются другие поставщики конфигураций.ASP.NET Core apps are configured using other configuration providers. Дополнительные сведения см. в разделе Конфигурация.For more information, see Configuration.

Пулы приложенийApplication Pools

При размещении на сервере множества веб-сайтов рекомендуем изолировать приложения друг от друга, запуская каждое из них в собственном пуле.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. В диалоговом окне Добавить веб-сайт служб IIS такая конфигурация задана по умолчанию.The IIS Add Website dialog defaults to this configuration. Если указано имя сайта, оно автоматически переносится в текстовое поле Пул приложений.When Site name is provided, the text is automatically transferred to the Application pool textbox. При добавлении веб-сайта создается пул приложений с именем сайта.A new app pool is created using the site name when the site is added.

Удостоверение пула приложенийApplication Pool Identity

Учетная запись удостоверения пула приложений позволяет запускать приложение от имени уникальной учетной записи, не создавая домены или локальные учетные записи и не управляя ими.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. В службах IIS начиная с версии 8.0 рабочий процесс администратора IIS (WAS) создает виртуальную учетную запись с именем нового пула приложений и по умолчанию выполняет рабочие процессы пула приложений с помощью этой учетной записи.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. В консоли управления IIS в окне Дополнительные параметры для пула приложений должно быть выбрано Удостоверение ApplicationPoolIdentity.In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Диалоговое окно дополнительных параметров для пула приложений

Процесс управления IIS создает в системе безопасности Windows безопасный идентификатор с именем пула приложений.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. С помощью этого идентификатора можно защищать ресурсы,Resources can be secured using this identity. но он не является реальной учетной записью и не отображается в консоли управления пользователями Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Если рабочему процессу IIS требуется предоставить доступ к приложению с повышенными правами, измените список управления доступом (ACL) для каталога, содержащего приложение.If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Откройте проводник и перейдите к каталогу.Open Windows Explorer and navigate to the directory.

  2. Щелкните каталог правой кнопкой мыши и выберите пункт Свойства.Right-click on the directory and select Properties.

  3. На вкладке Безопасность нажмите кнопку Изменить, а затем — кнопку Добавить.Under the Security tab, select the Edit button and then the Add button.

  4. Нажмите кнопку Размещение и выберите систему.Select the Locations button and make sure the system is selected.

  5. В поле Введите имена выбираемых объектов введите IIS AppPool\<имя_пула_приложений>.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Нажмите кнопку Проверить имена.Select the Check Names button. В случае с DefaultAppPool проверьте имена с помощью IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. После нажатия кнопки Проверить имена в области имен объектов отобразится значение DefaultAppPool.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Вручную ввести имя пула приложений в области имен объектов нельзя.It isn't possible to enter the app pool name directly into the object names area. При поиске имени объекта используйте формат IIS AppPool\<имя_пула_приложений>.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Диалоговое окно выбора пользователей и групп для папки приложения. До нажатия кнопки "Проверить имена" в области имен объектов к строке IIS AppPool" добавилось имя пула приложений, DefaultAppPool.

  6. Нажмите кнопку ОК.Select OK.

    Диалоговое окно выбора пользователей и групп для папки приложения. После нажатия кнопки "Проверить имена" в области имен объектов отображается имя пула приложений, DefaultAppPool.

  7. Разрешения на чтение и выполнение предоставляются по умолчанию.Read & execute permissions should be granted by default. При необходимости предоставьте дополнительные разрешения.Provide additional permissions as needed.

Кроме того, доступ можно предоставить через командную строку, используя средство ICACLS.Access can also be granted at a command prompt using the ICACLS tool. В случае с DefaultAppPool выполняется такая команда:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Дополнительные сведения об ICACLS см. здесь.For more information, see the icacls topic.

Ресурсы развертывания для администраторов IISDeployment resources for IIS administrators

Дополнительные сведения о службах IIS см. в документации по ним.Learn about IIS in-depth in the IIS documentation.
Документация по службам IISIIS documentation

Дополнительные сведения о моделях развертывания приложения .NET Core.Learn about .NET Core app deployment models.
Развертывание приложений .NET Core.NET Core application deployment

Сведения о том, как модуль ASP.NET Core позволяет веб-серверу Kestrel использовать IIS или IIS Express в качестве обратного прокси-сервера.Learn how the ASP.NET Core Module allows the Kestrel web server to use IIS or IIS Express as a reverse proxy server.
Модуль ASP.NET CoreASP.NET Core Module

Сведения о настройке модуля ASP.NET Core для размещения приложений ASP.NET Core.Learn how to configure the ASP.NET Core Module for hosting ASP.NET Core apps.
Справочник по конфигурации модуля ASP.NET CoreASP.NET Core Module configuration reference

Сведения о структуре каталогов опубликованных приложений ASP.NET Core.Learn about the directory structure of published ASP.NET Core apps.
Структура каталоговDirectory structure

Сведения об обнаружении активных и неактивных модулей IIS для приложения ASP.NET Core и управлении модулями IIS.Discover active and inactive IIS modules for ASP.NET Core apps and how to manage IIS modules.
Модули IISIIS modules

Сведения о диагностике проблем с развертываниями IIS приложений ASP.NET Core.Learn how to diagnose problems with IIS deployments of ASP.NET Core apps.
Устранение неполадокTroubleshoot

Распознавание распространенных ошибок при размещении приложений ASP.NET Core в IIS.Distinguish common errors when hosting ASP.NET Core apps on IIS.
Справочник по общим ошибкам для службы приложений Azure и служб IISCommon errors reference for Azure App Service and IIS

Дополнительные ресурсыAdditional resources