Apache ActiveMQ Artemis 內嵌了 Jetty 網頁伺服器。其主要目的是託管 管理控制台。然而,它也可以託管其他網頁應用程式。

1. 設定

內嵌的 Jetty 實例透過 etc/bootstrap.xml 中的 web 元素進行設定,例如:

<web path="web">
   <binding uri="https://127.0.0.1:8161">
      <app url="activemq-branding" war="activemq-branding.war"/>
      <app url="artemis-plugin" war="artemis-plugin.war"/>
      <app url="console" war="console.war"/>
   </binding>
</web>

1.1. 網頁

web 元素具有以下屬性:

path

用於尋找網頁應用程式封存檔(即 WAR 檔案)的子目錄名稱。這是代理程式首頁或實例目錄的子目錄。

customizer

要載入的自訂類別名稱。

rootRedirectLocation

將根目標的請求重新導向到的位置。

webContentEnabled

是否可以存取首頁和實例目錄的 web 資料夾中包含的內容。預設值為 false

maxThreads

嵌入式網頁伺服器可建立以處理 HTTP 請求的最大執行緒數。預設值為 200

minThreads

嵌入式網頁伺服器將保留以處理 HTTP 請求的最小執行緒數。預設值為 8,或者如果 maxThreads 的值較低,則採用 maxThreads 的值。

idleThreadTimeout

從嵌入式網頁伺服器終止閒置執行緒之前等待的時間。以毫秒為單位。預設值為 60000

scanPeriod

binding 元素的 sslAutoReload 屬性值為 true 時,掃描與綁定相關的金鑰和信任儲存檔案變更的頻率,詳細資訊請參閱綁定。以秒為單位。預設值為 5

maxRequestHeaderSize

HTTP 請求行和 HTTP 請求標頭允許的最大大小。以位元組為單位。預設值為 8192

maxResponseHeaderSize

HTTP 回應標頭允許的最大大小。以位元組為單位。預設值為 8192

1.2. 綁定

web 元素應至少包含一個 binding 元素,以設定用戶端如何連線到網頁伺服器。binding 元素具有以下屬性:

uri

要使用的協定(即 httphttps),以及要接聽的主機和連接埠。此屬性為必要屬性。

clientAuth

用戶端連線時是否應出示 SSL 憑證。僅在使用 https 時適用。

passwordCodec

用於取消遮罩 keystorePasswordtrustStorePassword 的自訂編解碼器。

keyStorePath

金鑰儲存區在磁碟上的位置。僅在使用 https 時適用。

keyStorePassword

金鑰儲存區的密碼。僅在使用 https 時適用。可以使用 ENC() 語法或透過定義 passwordCodec 來遮罩。如需詳細資訊,請參閱密碼遮罩章節。

trustStorePath

信任儲存區在磁碟上的位置。僅在使用 https 時適用。

trustStorePassword

信任儲存區的密碼。僅在使用 https 時適用。可以使用 ENC() 語法或透過定義 passwordCodec 來遮罩。如需詳細資訊,請參閱密碼遮罩章節。

includedTLSProtocols

以逗號分隔的包含 TLS 協定清單,例如 "TLSv1,TLSv1.1,TLSv1.2"。僅在使用 https 時適用。

excludedTLSProtocols

以逗號分隔的排除 TLS 協定清單,例如 "TLSv1,TLSv1.1,TLSv1.2"。僅在使用 https 時適用。

includedCipherSuites

以逗號分隔的包含密碼套件清單。僅在使用 https 時適用。

excludedCipherSuites

以逗號分隔的排除密碼套件清單。僅在使用 https 時適用。

sniHostCheck

用戶端請求中的 SNI 主機名稱是否必須符合伺服器憑證中的一般名稱或主體替代名稱。預設值為 true。僅在使用 https 時適用。

sniRequired

用戶端請求是否必須包含 SNI 主機名稱。預設值為 false。僅在使用 https 時適用。

sslAutoReload

是否必須監看金鑰和信任儲存檔案的變更並自動重新載入。監看週期由 web 元素的 scanPeriod 屬性控制,詳細資訊請參閱網頁。預設值為 false

1.3. 應用程式

每個網頁應用程式都應在 binding 元素內的 app 元素中定義。app 元素具有以下屬性:

url

用於網頁應用程式的內容。

war

磁碟上網頁應用程式封存檔的名稱。

2. 請求日誌

也可以透過具有以下屬性的 request-log 元素來設定 HTTP/S 請求記錄:

filename

請求日誌的完整路徑。此屬性為必要屬性。

append

是否附加到現有的日誌或將其截斷。布林值旗標。

extended

是否使用擴充的請求日誌格式。布林值旗標。如果為 true,將使用格式 %{client}a - %u %t "%r" %s %O "%{Referer}i" "%{User-Agent}i"。如果為 false,將使用格式 %{client}a - %u %t "%r" %s %O。預設值為 false。如需詳細資訊,請參閱格式規格

filenameDateFormat

日誌檔案名稱日期格式。

retainDays

旋轉日誌檔案刪除前的天數。

ignorePaths

將不會記錄的請求路徑。以逗號分隔的清單。

format

要使用的自訂格式。如果設定此選項,將會覆寫 extended。如需詳細資訊,請參閱格式規格

先前支援以下選項,但已由 format 取代:logCookielogTimeZonelogDateFormatlogLocalelogLatencylogServerpreferProxiedForAddress。現在所有這些選項都已棄用並忽略。

這些屬性基本上會直接傳遞到基礎 org.eclipse.jetty.server.CustomRequestLogorg.eclipse.jetty.server.RequestLogWriter 實例。預設值基於這些實作。

以下是一個設定範例:

<web path="web">
   <binding uri="https://127.0.0.1:8161">
      <app url="activemq-branding" war="activemq-branding.war"/>
      <app url="artemis-plugin" war="artemis-plugin.war"/>
      <app url="console" war="console.war"/>
   </binding>
   <request-log filename="${artemis.instance}/log/http-access-yyyy_MM_dd.log" append="true" extended="true"/>
</web>

2.1. 系統屬性

可以使用系統屬性來新增或更新網頁設定項目。如果您定義一個以 "webconfig." 開頭的系統屬性,它將在啟動時進行剖析以更新網頁設定。

若要為名稱為 artemis 的現有綁定啟用用戶端驗證,請將系統屬性 webconfig.bindings.artemis.clientAuth 設定為 true,例如:

java -Dwebconfig.bindings.artemis.clientAuth=true

若要新增新的綁定或應用程式,請使用其新名稱設定新的綁定或應用程式屬性,例如:

java -Dwebconfig.bindings.my-binding.uri=https://127.0.0.1:8162
java -Dwebconfig.bindings.my-binding.apps.my-app.uri=my-app
java -Dwebconfig.bindings.my-binding.apps.my-app.war=my-app.war

若要更新沒有名稱的綁定,請使用其 uri,若要更新沒有名稱的應用程式,請使用其 url,例如:

<web path="web">
  <binding uri="https://127.0.0.1:8161">
    <app url="activemq-branding" war="activemq-branding.war"/>
...
java -Dwebconfig.bindings."https://127.0.0.1:8161".clientAuth=true
java -Dwebconfig.bindings."https://127.0.0.1:8161".apps."activemq-branding".war=my-branding.war

3. 代理轉發

代理和負載平衡器通常支援 X-Forwarded 標頭,以傳送當代理參與請求路徑時已變更或遺失的資訊。Jetty 支援 ForwardedRequestCustomizer 自訂程式來處理 X-Forwarded 標頭。透過 web 元素設定 customizer 屬性以啟用 ForwardedRequestCustomizer 自訂程式,例如:

<web path="web" customizer="org.eclipse.jetty.server.ForwardedRequestCustomizer">
   <binding uri="https://127.0.0.1:8161">
      <app url="activemq-branding" war="activemq-branding.war"/>
      <app url="artemis-plugin" war="artemis-plugin.war"/>
      <app url="console" war="console.war"/>
   </binding>
</web>

4. 管理

嵌入式網頁伺服器可以透過任何可用的管理介面,分別透過 ActiveMQServerControl 上的 stopEmbeddedWebServerstarteEmbeddedWebServerrestartEmbeddedWebServer 操作來停止、啟動或重新啟動。