Справочник по конфигурации HttpPlatformHandler

Команда IIS

В этой статье представлен обзор HttpPlatformHandler и объясняется конфигурация модуля.

Общие сведения о функциях

HttpPlatformHandler — это модуль IIS для IIS 8+, который выполняет следующие два действия:

  1. Управление прослушивателями HTTP- это может быть любой процесс, который может прослушивать порт для http-запросов. Например, Tomcat, Jetty, Node.exe, Ruby и т. д.
  2. Прокси-сервер перенаправляет запросы к процессу, которым он управляет.

Конфигурация HttpPlatformHandler

HttpPlatformHandler настраивается через файл сайта или приложений web.config и имеет собственный раздел конфигурации в system.webServer — httpPlatform.

Атрибуты конфигурации

Атрибут Описание
processPath Обязательный атрибут. Путь к исполняемому файлу или скрипту, который запустит процесс прослушивания HTTP-запросов. C версии 1.2 поддерживаются относительные пути — если путь начинается с '.', он считается относительным по отношению к корню сайта. Значение по умолчанию отсутствует
arguments Необязательное строковое значение. Аргументы исполняемого файла или скрипта, указанного в параметре processPath. Значение по умолчанию отсутствует.
startupTimeLimit Необязательный целочисленный атрибут. Длительность в секундах, в течение которых HttpPlatformHandler будет ожидать, чтобы исполняемый файл или скрипт запустил процесс, который прослушивает порт. Если это ограничение времени превышено, HttpPlatformHandler убьет процесс и попытается запустить его еще раз при запускеRetryCount . Значение по умолчанию — 10.
startupRetryCount Необязательный целочисленный атрибут. Количество раз HttpPlatformHandler попытается запустить процесс, указанный в processPath. Дополнительные сведения см. в разделе startupTimeLimit . Значение по умолчанию — 10.
rapidFailsPerMinute Необязательный целочисленный атрибут. Указывает количество сбоев за минуту, которыми может завершиться процесс, указанный в processPath. Если это ограничение превышено, HttpPlatformHandler перестанет запускать процесс на оставшуюся часть минуты. Атрибут managedPipelineMode может быть одним из следующих возможных значений. Значение по умолчанию — 10.
requestTimeout Необязательный атрибут временного интервала. Указывает длительность, в течение которой HttpPlatformHandler будет ожидать ответа от процесса прослушивания %HTTP_PLATFORM_PORT%. Значение по умолчанию — "00:02:00".
stdoutLogEnabled Необязательный логический атрибут. Если значение true, stdout и stderr для процесса, указанного в параметре processPath , будет перенаправлено в файл, указанный в stdoutLogFile. Значение по умолчанию — false.
stdoutLogFile Необязательный строковый атрибут. Указывает относительный ИЛИ абсолютный путь к файлу, для которого stdout и stderr из процесса, указанного в processPath, будут логироваться. Относительные пути задаются относительно корневого каталога веб-сайта. Начиная с версии 1.2, любой путь, начинающийся с '.', будет трактоваться относительно корня сайта; все остальные пути будут рассматриваться как абсолютные. Значение по умолчанию — httpplatform-stdout..
processesPerApplication Необязательный целочисленный атрибут. Указывает количество экземпляров процесса, указанного в параметре processPath , которое можно спрягать на каждое приложение. Максимум — 100. Значение по умолчанию — 1.
forwardWindowsAuthToken Верно или неверно. Новые возможности для версии 1.2. Если для этого параметра задано значение true, токен будет перенаправлен в дочерний процесс, прослушивающий %HTTP_PLATFORM_PORT%, в виде заголовка 'X-IIS-WindowsAuthToken' для каждого запроса. Этот процесс несет ответственность за вызов CloseHandle для этого токена по каждому запросу. Значение по умолчанию — false.

Дочерние элементы

Элемент Описание
environmentVariables Настраивает коллекцию environmentVariables для процесса, указанного в параметре processPath .
recycleOnFileChange настраивает коллекцию файлов , которая перезапускает рабочий процесс при внесении изменений в файл в указанном списке. Синтаксис элемента, например <file path=".\touch.txt"/> or <file path="c:\file.txt"/>

Примеры конфигурации HttpPlatformHandler

Ниже приведены примеры конфигурации для запуска ряда приложений с различными процессами.

Tomcat

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="c:\dev\javasites\bin\apache-tomcat-8.0.15\bin\startup.bat" 
                  arguments="" 
                  stdoutLogEnabled="true" 
                  stdoutLogFile="\\?c:\dev\javasites\log.txt">
      <environmentVariables>
        <environmentVariable name="JRE_HOME" value="%programfiles%\java\jdk1.8.0_25" />
        <environmentVariable name="CATALINA_OPTS" value="-Dport.http=%HTTP_PLATFORM_PORT% -Dsomeotherconfig=value"/>
        <environmentVariable name="CATALINA_HOME" value="c:\dev\javasites\bin\apache-tomcat-8.0.15" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

Пристани

<?xml version="1.0"?>
<configuration>
    <system.webServer>
      <handlers>
        <add name="httpplatformhandler" path="*" verb="*" modules ="httpPlatformHandler" resourceType="Unspecified"/>
      </handlers>
      <httpPlatform processPath="c:\Program Files\Java\jdk1.8.0_25\bin\java.exe" 
                    arguments="-Djava.net.preferIPv4Stack=true -Djetty.port=%HTTP_PLATFORM_PORT% -Djetty.base=&quot;c:\dev\javasites\bin\jetty-distribution-9.2.6.v20141205&quot; -jar &quot;c:\dev\javasites\bin\jetty-distribution-9.2.6.v20141205\start.jar&quot;" 
                    startupTimeLimit="20" 
                    startupRetryCount="20" 
                    stdoutLogEnabled="true"></httpPlatform>
    </system.webServer>
</configuration>

Пример кода

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {
        
        using(ServerManager serverManager = new ServerManager()) { 
            Configuration config = serverManager.GetWebConfiguration("JavaSites");
            
            ConfigurationSection httpPlatformSection = config.GetSection("system.webServer/httpPlatform");
            httpPlatformSection["processPath"] = @"c:\dev\javasites\bin\apache-tomcat-8.0.15\bin\startup.bat";
            httpPlatformSection["arguments"] = @"";
            httpPlatformSection["stdoutLogFile"] = @"=""\\?c:\dev\javasites\log.txt";
            
            ConfigurationElementCollection environmentVariablesCollection = httpPlatformSection.GetCollection("environmentVariables");
            
            ConfigurationElement environmentVariableElement = environmentVariablesCollection.CreateElement("environmentVariable");
            environmentVariableElement["name"] = @"JRE_HOME";
            environmentVariableElement["value"] = @"=""%programfiles%\java\jdk1.8.0_25";
            environmentVariablesCollection.Add(environmentVariableElement);
            
            ConfigurationElement environmentVariableElement1 = environmentVariablesCollection.CreateElement("environmentVariable");
            environmentVariableElement1["name"] = @"CATALINA_OPTS";
            environmentVariableElement1["value"] = @"=""-Dport.http=%HTTP_PLATFORM_PORT% -Dsomeotherconfig=value";
            environmentVariablesCollection.Add(environmentVariableElement1);
            
            ConfigurationElement environmentVariableElement2 = environmentVariablesCollection.CreateElement("environmentVariable");
            environmentVariableElement2["name"] = @"CATALINA_HOME";
            environmentVariableElement2["value"] = @"c:\dev\javasites\bin\apache-tomcat-8.0.15";
            environmentVariablesCollection.Add(environmentVariableElement2);
            
            serverManager.CommitChanges();
        }
    }
}

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/JavaSites";

var httpPlatformSection = adminManager.GetAdminSection("system.webServer/httpPlatform", "MACHINE/WEBROOT/APPHOST/JavaSites");
httpPlatformSection.Properties.Item("processPath").Value = "c:\\dev\\javasites\\bin\\apache-tomcat-8.0.15\\bin\\startup.bat";
httpPlatformSection.Properties.Item("arguments").Value = "";
httpPlatformSection.Properties.Item("stdoutLogFile").Value = "=\"\\\\?c:\\dev\\javasites\\log.txt";

var environmentVariablesCollection = httpPlatformSection.ChildElements.Item("environmentVariables").Collection;

var environmentVariableElement = environmentVariablesCollection.CreateNewElement("environmentVariable");
environmentVariableElement.Properties.Item("name").Value = "JRE_HOME";
environmentVariableElement.Properties.Item("value").Value = "=\"%programfiles%\\java\\jdk1.8.0_25";
environmentVariablesCollection.AddElement(environmentVariableElement);

var environmentVariableElement1 = environmentVariablesCollection.CreateNewElement("environmentVariable");
environmentVariableElement1.Properties.Item("name").Value = "CATALINA_OPTS";
environmentVariableElement1.Properties.Item("value").Value = "=\"-Dport.http=%HTTP_PLATFORM_PORT% -Dsomeotherconfig=value";
environmentVariablesCollection.AddElement(environmentVariableElement1);

var environmentVariableElement2 = environmentVariablesCollection.CreateNewElement("environmentVariable");
environmentVariableElement2.Properties.Item("name").Value = "CATALINA_HOME";
environmentVariableElement2.Properties.Item("value").Value = "c:\\dev\\javasites\\bin\\apache-tomcat-8.0.15";
environmentVariablesCollection.AddElement(environmentVariableElement2);

adminManager.CommitChanges();

Командная строка (AppCmd)

appcmd.exe set config "JavaSites" -section:system.webServer/httpPlatform /processPath:"c:\dev\javasites\bin\apache-tomcat-8.0.15\bin\startup.bat" /arguments:"" /stdoutLogFile:"="""\\?c:\dev\javasites\log.txt"  

appcmd.exe set config "JavaSites" -section:system.webServer/httpPlatform /+"environmentVariables.[name='JRE_HOME',value='="""%programfiles%\java\jdk1.8.0_25']" 

appcmd.exe set config "JavaSites" -section:system.webServer/httpPlatform /+"environmentVariables.[name='CATALINA_OPTS',value='="""-Dport.http=%HTTP_PLATFORM_PORT% -Dsomeotherconfig=value']" 

appcmd.exe set config "JavaSites" -section:system.webServer/httpPlatform /+"environmentVariables.[name='CATALINA_HOME',value='c:\dev\javasites\bin\apache-tomcat-8.0.15']"

PowerShell

Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/JavaSites'  -filter "system.webServer/httpPlatform" -name "processPath" -value "c:\dev\javasites\bin\apache-tomcat-8.0.15\bin\startup.bat"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/JavaSites'  -filter "system.webServer/httpPlatform" -name "arguments" -value ""
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/JavaSites'  -filter "system.webServer/httpPlatform" -name "stdoutLogFile" -value "="""\\?c:\dev\javasites\log.txt"

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/JavaSites'  -filter "system.webServer/httpPlatform/environmentVariables" -name "." -value @{name='JRE_HOME';value='="""%programfiles%\java\jdk1.8.0_25'}

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/JavaSites'  -filter "system.webServer/httpPlatform/environmentVariables" -name "." -value @{name='CATALINA_OPTS';value='="""-Dport.http=%HTTP_PLATFORM_PORT% -Dsomeotherconfig=value'}

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/JavaSites'  -filter "system.webServer/httpPlatform/environmentVariables" -name "." -value @{name='CATALINA_HOME';value='c:\dev\javasites\bin\apache-tomcat-8.0.15'}