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
-
要使用的協定(即
http
或https
),以及要接聽的主機和連接埠。此屬性為必要屬性。 - clientAuth
-
用戶端連線時是否應出示 SSL 憑證。僅在使用
https
時適用。 - passwordCodec
-
用於取消遮罩
keystorePassword
和trustStorePassword
的自訂編解碼器。 - 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
。
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
取代:logCookie
、logTimeZone
、logDateFormat
、logLocale
、logLatency
、logServer
、preferProxiedForAddress
。現在所有這些選項都已棄用並忽略。
這些屬性基本上會直接傳遞到基礎 org.eclipse.jetty.server.CustomRequestLog
和 org.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
上的 stopEmbeddedWebServer
、starteEmbeddedWebServer
和 restartEmbeddedWebServer
操作來停止、啟動或重新啟動。