Use HttpPlatformHandler

 

適用於: Windows Azure Pack

HttpPlatformHandler 是 Internet Information Services (IIS) 模組,可用於:

  • 管理任何可以在連接埠上接聽 HTTP 要求的處理序 (例如 Tomcat、Jetty、node.exe 及 Ruby)序。

  • 將 Proxy 要求傳送給其所管理的處理序。

HttpPlatformHandler 可與 Windows Azure 組件 一起使用:Web Sites 可裝載 Java 及其他處理序。

您可以使用 FTP、Git、Kudu 與網站的整合式 SCM 功能部署 Java 網站。

WebDeploy 可用為通訊協定。由於 Java 並非以 Visual Studio 開發而來,所以 WebDeploy 不適用於 Java Web 應用程式部署使用案例。

在 Azure 上自訂 Java Web 應用程式需要下列設定:

  1. Java 處理序使用的 HTTP 連接埠會動態指定給環境變數 HTTP_PLATFORM_PORT。HTTP 接聽程式必須使用此連接埠。

  2. 除此 HTTP 接聽程式連接埠之外的所有接聽程式連接埠都必須停用。在 Tomcat 中,這包括關機、HTTPS 及 AJP 連接埠。

  3. 此容器必須設定為僅供 IPv4 流量之用。

  4. 應用程式的啟動命令必須在組態中設定。

  5. 需要可寫入之目錄的應用程式,必須位於 Windows Azure 組件 的內容目錄中:Web Sites,亦即 D:\home。環境變數 HOME 係指 D:\home。

您可以在 Web.config 檔案中設定環境變數。

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>

arguments (default = ""):此引數會傳送給 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 (default = 10):每分鐘允許 HTTP 接聽程式處理序損毀的次數。若超出此限制,HttpPlatformHandler 在該分鐘的剩餘時間內,會停止啟動該處理序。

requestTimeout (default = "00:02:00"):HttpPlatformHandler 等候來自接聽 %http_platform_port% 之處理序的回應的時間量。

startupRetryCount (default = 10):HttpPlatformHandler 嘗試啟動 HTTP 接聽程式處理序的次數。

startupTimeLimit (default = 10 seconds):HttpPlatformHandler 等候 HTTP 接聽程式開始接聽通訊埠之處理序的時間量。若超出此時間限制,HttpPlatformHandler 會停止 HTTP 接聽程式,然後依據 startupRetryCount 的設定值嘗試重新啟動該接聽程式。

stdoutLogEnabled (default = "true"):若為 True,stdout 及 stderr HTTP 接聽程式會被重新導向至 stdoutLogFile 所指定的檔案。

stdoutLogFile (default="d:\home\LogFiles\httpPlatformStdout.log"):HTTP 接聽程式到 stdout 及 stderr 記錄的絕對檔案路徑。

System_CAPS_note注意事項

%Http_platform_port% 是特殊的預留位置,必須在引數屬性或 httpPlatformEnvironmentVariables 清單中指定。HttpPlatformHandler 會以連接埠動態取代此變數,以便於 HTTP 接聽程式可以接聽此連接埠。

在下列 Tomcat 或 Jetty 範例中,範例 Web.config 檔案與應用程式組態會示範如何在 Windows Azure 組件 啟用您的 Java 應用程式:Web Sites 一起運作。

下列範例示範如何在 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 檔案中設定,您可以在其中加入設定 IPv4 設定,您可以在其中加入 java.net.preferIPv4Stack=true

Windows Azure 組件不支援 Direct3D 呼叫:Web Sites 一起運作。若您的應用程式會執行這類呼叫,請加入下列 Java 選項予以停用:-Dsun.java2d.d3d=false

以下是執行 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 組態在啟動 INI 檔案中必須變更如下:java.net.preferIPv4Stack=true

若要使用 HttpPlaftormHandler 裝載 Java 應用程式,請遵循下列步驟:

  1. 使用租用戶的管理入口網站建立空白網站。

  2. 下載一份 Tomcat (例如從 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 檔案,並將其加入您的網站資料夾中 (例如 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. 將 c:\dev\javasites 的內容上傳到您在步驟 1 中建立之網站的 wwwroot 資料夾。

  9. 若要瀏覽至 Pebble Java 應用程式,請在根 URL 結尾加上 /pebble (例如 http://javawebsite.awbl-s.redant.selfhost.corp.microsoft.com/pebble/)。

顯示: