Informations de référence sur la configuration de HttpPlatformHandler

par l’équipe IIS

Cet article fournit une vue d’ensemble de HttpPlatformHandler et explique la configuration du module.

Vue d’ensemble des fonctionnalités

HttpPlatformHandler est un module IIS, pour IIS 8+, qui effectue les deux opérations suivantes :

  1. Gestion des processus des écouteurs HTTP : il peut s’agir de n’importe quel processus qui peut écouter sur un port pour les requêtes HTTP. Par exemple : Tomcat, Jetty, Node.exe, Ruby, etc.
  2. Requêtes par proxy vers le processus qu'il gère.

Configuration de HttpPlatformHandler

HttpPlatformHandler est configuré via le fichier web.config d'un site ou d'une application et possède sa propre section de configuration dans system.webServer - httpPlatform.

Attributs de configuration

Attribut Description
processPath Attribut obligatoire. Chemin d’accès à l’exécutable ou au script qui lance un processus à l’écoute des requêtes HTTP. À partir de la version 1.2, les chemins relatifs sont pris en charge si le chemin commence par « . » le chemin est considéré comme relatif à la racine du site. Il n’existe aucune valeur par défaut
arguments Valeur de chaîne facultative. Arguments de l’exécutable ou du script spécifiés dans le paramètre processPath. Il n’existe aucune valeur par défaut.
startupTimeLimit Attribut entier facultatif. Durée en secondes pendant laquelle HttpPlatformHandler attend que l’exécutable/script démarre un processus à l’écoute sur le port. Si cette limite de temps est dépassée, HttpPlatformHandler tue le processus et tente de le lancer à nouveau startupRetryCount fois. La valeur par défaut est 10.
startupRetryCount Attribut entier facultatif. Nombre de fois où HttpPlatformHandler tente de lancer le processus spécifié dans processPath. Pour plus d’informations, consultez startupTimeLimit . La valeur par défaut est 10.
rapidFailsPerMinute Attribut entier facultatif. Indique le nombre de fois où le processus spécifié dans processPath est autorisé à se bloquer par minute. Si cette limite est dépassée, HttpPlatformHandler cesse de lancer le processus pour le reste de la minute. L’attribut managedPipelineMode peut être l’une des valeurs possibles suivantes. La valeur par défaut est 10.
requestTimeout Attribut timespan facultatif. Spécifie la durée pendant laquelle HttpPlatformHandler attend une réponse du processus écoutant sur %HTTP_PLATFORM_PORT%. La valeur par défaut est « 00:02:00 ».
stdoutLogEnabled Attribut booléen facultatif. Si la valeur est true, stdout et stderr pour le processus spécifié dans le paramètre processPath sont redirigés vers le fichier spécifié dans stdoutLogFile. La valeur par défaut est false.
stdoutLogFile Attribut de chaîne facultatif. Spécifie le chemin du fichier absolu OR relatif pour lequel stdout et stderr du processus spécifié dans processPath seront enregistrés. Les chemins d’accès relatifs sont relatifs par rapport à la racine du site. À compter de la version 1.2, tout chemin commençant par « . » sera relatif à la racine du site et tous les autres chemins seront traités comme des chemins absolus. La valeur par défaut est httpplatform-stdout..
processesPerApplication Attribut entier facultatif. Spécifie le nombre d’instances du processus spécifié dans le paramètre processPath qui peut être généré par application. La valeur maximale est de 100. La valeur par défaut est 1.
forwardWindowsAuthToken Vrai ou faux. Nouveautés de la version 1.2. Si ce paramètre est défini sur true, le jeton sera transféré vers le processus enfant écoutant sur %HTTP_PLATFORM_PORT% en tant qu'en-tête « X-IIS-WindowsAuthToken » par requête. Il incombe à ce processus d’appeler CloseHandle sur ce jeton pour chaque demande. La valeur par défaut est false.

Éléments enfants

Élément Description
environmentVariables Configure la collection environmentVariables pour le processus spécifié dans le paramètre processPath .
recycleOnFileChange configure la collection de fichiers qui recycle le processus de travail lorsque des modifications sont apportées au fichier dans la liste spécifiée. Syntaxe de l’élément, par exemple <chemin d’accès de fichier=".\touch.txt"/> ou <chemin d’accès de fichier="c:\file.txt"/>

Exemples de configuration httpPlatformHandler

Vous trouverez ci-dessous des exemples de configuration pour exécuter un certain nombre d’applications avec différents processus.

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>

Jetty

<?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>

Exemple de code

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();

Ligne de commande (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'}