HttpPlatformHandler を使用する

 

適用対象: Azure Pack Windows

HttpPlatformHandler は、次のことに使用できるインターネット インフォメーション サービス (IIS) モジュールです。

  • HTTP 要求のポートをリッスンできる任意のプロセス (Tomcat、Jetty、node.exe、Ruby など) を管理する。

  • 管理しているプロセスにプロキシ要求を送信する。

HttpPlatformHandler と Java Web アプリケーション

HttpPlatformHandler は、Windows Azure Pack: Web サイトと共に使用して、Java やその他のプロセスをホストできます。

JAVA ベースの Web サイトは、FTP、Git、Kudu、および Web サイトの統合された SCM 機能を使用してデプロイできます。

WebDeploy はプロトコルとして機能します。 Java は Visual Studio で開発されていないため、WebDeploy は Java Web アプリケーションのデプロイ事例には適していません。

カスタム Java Web アプリケーションの構成ガイドライン

Azure のカスタム Java Web アプリケーションには次の設定が必要です。

  1. Java プロセスで使用される HTTP ポートは、環境変数 HTTP_PLATFORM_PORT に動的に割り当てられます。 HTTP リスナーは、このポートを使用する必要があります。

  2. 1 つの HTTP リスナー ポートを除くすべてのリスナー ポートを無効にする必要があります。 Tomcat の場合、シャットダウン ポート、HTTPS ポート、AJP ポートが含まれます。

  3. コンテナーは IPv4 トラフィック専用に構成する必要があります。

  4. アプリケーションのスタートアップ コマンドは、構成で設定する必要があります。

  5. 書き込み可能なディレクトリを必要とするアプリケーションは、Windows Azure Pack: Web サイト (D:\home) のコンテンツ ディレクトリに配置する必要があります。 環境変数 HOME は D:\home を表します。

環境変数は Web.config ファイルで設定できます。

web.config の httpPlatform の構成

HttpPlatformHandler は、アプリケーションの Web.config ファイルで次のスキーマを使用します。

<configSchema>
  <sectionSchema name="system.webServer/httpPlatform">
    <attribute name="processPath" type="string" expanded="true"/>
    <attribute name="arguments" type="string" expanded="true" defaultValue=""/>
    <attribute name="startupTimeLimit" type="uint" defaultValue="10" validationType="integerRange" validationParameter="0,3600"/> <!-- in seconds -->
    <attribute name="startupRetryCount" type="uint" defaultValue="10" validationType="integerRange" validationParameter="0,100"/>
    <attribute name="rapidFailsPerMinute" type="uint" defaultValue="10" validationType="integerRange" validationParameter="0,100"/>
    <attribute name="requestTimeout" type="timeSpan" defaultValue="00:02:00" validationType="timeSpanRange" validationParameter="0,2592000,60"/>
    <attribute name="stdoutLogEnabled" type="bool" defaultValue="false" />
    <attribute name="stdoutLogFile" type="string" defaultValue="httpplatform-stdout" expanded="true"/>
    <attribute name="processesPerApplication" type="uint" defaultValue="1" validationType="integerRange" validationParameter="1,100"/>
    <element name="environmentVariables">
      <collection addElement="environmentVariable" clearElement="clear">
        <attribute name="name" type="string" required="true" validationType="nonEmptyString"/>
        <attribute name="value" type="string" required="true"/>
      </collection>
    </element>
  </sectionSchema>
</configSchema>

引数 (既定値 = ""): processPath 属性によって識別される HTTP リスナーに送信される引数。

例 (processPath も表示):

processPath="%HOME%\site\wwwroot\bin\tomcat\bin\catalina.bat"
arguments="start"

processPath="%JAVA_HOME\bin\java.exe"
arguments="-Djava.net.preferIPv4Stack=true -Djetty.port=%HTTP\_PLATFORM\_PORT% -Djetty.base=&quot;%HOME%\site\wwwroot\bin\jetty-distribution-9.1.0.v20131115&quot; -jar &quot;%HOME%\site\wwwroot\bin\jetty-distribution-9.1.0.v20131115\start.jar&quot;"

processPath:HTTP リスナーの実行可能ファイルまたはスクリプトへのパス。

例 :

processPath="%JAVA_HOME%\bin\java.exe"

processPath="%HOME%\site\wwwroot\bin\tomcat\bin\startup.bat"

processPath="%HOME%\site\wwwroot\bin\tomcat\bin\catalina.bat"

rapidFailsPerMinute (既定値 = 10):HTTP リスナー プロセスに許可されている 1 分あたりのクラッシュの回数。 この制限を超えた場合、HttpPlatformHandler はその 1 分が経過するまでの間、プロセスの起動を停止します。

requestTimeout (既定値 = "00:02:00"):HttpPlatformHandler が %HTTP_PLATFORM_PORT% でリッスンしているプロセスからの応答を待機する時間。

startupRetryCount (既定値 = 10):HttpPlatformHandler が HTTP リスナー プロセスを起動しようとする回数。

startupTimeLimit (既定値 = 10 秒):HTTP リスナーによるポートのリッスン プロセスの起動を HttpPlatformHandler が待機する時間。 この制限時間を超えた場合、HttpPlatformHandler は HTTP リスナーを停止し、startupRetryCount に設定された値に基づいて再起動しようとします。

stdoutLogEnabled (既定値 = "true"):true の場合、HTTP リスナーの stdout と stderr は、stdoutLogFile で指定されるファイルにリダイレクトされます。

stdoutLogFile (既定値 = "d:\home\LogFiles\httpPlatformStdout.log"):HTTP リスナーからの stdout と stderr を記録するログ ファイルの絶対パス。

注意

%HTTP_PLATFORM_PORT% は、引数属性または httpPlatformEnvironmentVariables  リストの 一部として指定する必要がある特殊なプレースホルダーです。 HttpPlatformHandler は、HTTP リスナーがポートをリッスンできるように、この変数を動的にポートに置き換えます。

アプリケーション構成の例

次の Tomcat と Jetty の例では、サンプル Web.config ファイルとアプリケーション構成で、Windows Azure Pack: Web サイトで Java アプリケーションを有効にする方法を示します。

Tomcat

次の例は、Java 仮想マシンへの Tomcat のインストールを示しています。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="%HOME%\site\wwwroot\bin\tomcat\bin\startup.bat" 
        arguments="">
      <environmentVariables>
        <environmentVariable name="CATALINA_OPTS" value="-Dport.http=%HTTP_PLATFORM_PORT%" />
        <environmentVariable name="CATALINA_HOME" value="%HOME%\site\wwwroot\bin\tomcat" />
        <environmentVariable name="JRE_HOME" value="%HOME%\site\wwwroot\bin\java" /> <!-- optional, if not specified, this will default to %programfiles%\Java -->
        <environmentVariable name="JAVA_OPTS" value="-Djava.net.preferIPv4Stack=true" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

Tomcat の構成も変更する必要があります。 サーバー xml の設定を次のように編集する必要があります。

  • シャットダウン ポート = -1

  • HTTP コネクタ ポート = ${port.http}

  • HTTP コネクタ アドレス = "127.0.0.1"

  • HTTPS と AJP のコネクタをコメントアウト

IPv4 設定は catalina.properties ファイルでも設定でき、そこで java.net.preferIPv4Stack=true を追加できます。

Windows Azure Pack: Web サイトでは、Direct3D 呼び出しはサポートされていません。 アプリケーションでこのような呼び出しを行う場合は、-Dsun.java2d.d3d=false という Java オプションを追加して無効にします。

Jetty

Jetty の完全インストールを実行する構成の例は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httppPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="%JAVA_HOME%\bin\java.exe" 
         arguments="-Djava.net.preferIPv4Stack=true -Djetty.port=%HTTP_PLATFORM_PORT% -Djetty.base=&quot;%HOME%\site\wwwroot\bin\jetty-distribution-9.1.0.v20131115&quot; -jar &quot;%HOME%\site\wwwroot\bin\jetty-distribution-9.1.0.v20131115\start.jar&quot;"
        startupTimeLimit="20"
      startupRetryCount="10"
      stdoutLogEnabled="true">
    </httpPlatform>
  </system.webServer>
</configuration>

Jetty 構成は、java.net.preferIPv4Stack=true のように、開始 INI ファイルで変更する必要があります。

HttpPlatformHandler を使用した Java アプリケーションのホスト

HttpPlaftormHandler を使用して Java アプリケーションをホストするには、次の手順に従います。

  1. テナント用管理ポータルを使用して、空の Web サイトを作成します。

  2. Tomcat のコピー (たとえば、from http://tomcat.apache.org/) をダウンロードし、開発用コンピューター上のフォルダーに zip ファイルを抽出します (例: c:\dev\javasites\bin\apache-tomcat-8.0.15)。

  3. Java Development Kit のコピーを Tomcat と同じフォルダー (例: c:\dev\javasites\bin\jdk1.7.0_79) に追加します。

  4. 上で説明した Tomcat の例のように Tomcat の構成を変更します。

  5. 使用する Java アプリケーションのコピー ( Pebble ブログ ツールなど) を webapps フォルダーにダウンロードします。

  6. テキスト エディターを使用して新しい Web.config ファイルを作成し、Web サイト フォルダー (例: c:\dev\javasites\web.config) に追加します。

  7. Web.config ファイルを編集して、次のように HttpPlatformHandler 構成を追加します。 この構成では、Tomcat サーバーと JDK ディレクトリの場所の指定、Catalina の設定、Pebble で必要な ${user.home} 変数の定義を行います。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
            </handlers>
    
            <httpPlatform processPath="%HOME%\site\wwwroot\bin\apache-tomcat-8.0.15\bin\startup.bat" 
                          arguments="">
                <environmentVariables>
                    <environmentVariable name="JRE_HOME" value="%HOME%\site\wwwroot\bin\jdk1.7.0_79" />
                    <environmentVariable name="CATALINA_OPTS" value="-Dport.http=%HTTP_PLATFORM_PORT% -Dsomeotherconfig=value" />
                    <environmentVariable name="CATALINA_HOME" value="%HOME%\site\wwwroot\bin\apache-tomcat-8.0.15" />
      <environmentVariable name="JAVA_OPTS" value="-Duser.home=%HOME%/site/wwwroot/user_home"/>
                </environmentVariables>
            </httpPlatform>
        </system.webServer>
    </configuration>
    
  8. 手順 1. で作成した Web サイトの wwwroot フォルダーに c:\dev\javasites の内容をアップロードします。

  9. Pebble Java アプリケーションを参照するには、ルート URL に /pebble を追加します (例: http://javawebsite.awbl-s.redant.selfhost.corp.microsoft.com/pebble/)。