Apache ActiveMQ Artemis 嵌入了一个 Jetty web 服务器。它的主要目的是托管 管理控制台。但是,它也可以托管其他 web 应用程序。

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

web 元素具有以下属性

path

查找 web 应用程序归档文件(即 WAR 文件)的子目录的名称。这是代理的主目录或实例目录的子目录。

customizer

要加载的自定义程序类的名称。

rootRedirectLocation

将请求重定向到根目标的位置。

webContentEnabled

主目录和实例目录的 web 文件夹中包含的内容是否可访问。默认值为 false

maxThreads

嵌入式 web 服务器可以创建以服务 HTTP 请求的最大线程数。默认值为 200

minThreads

嵌入式 web 服务器将保留以服务 HTTP 请求的最小线程数。默认值为 8maxThreads 的值(如果更低)。

idleThreadTimeout

在终止嵌入式 web 服务器中的空闲线程之前等待的时间。以毫秒为单位。默认值为 60000

scanPeriod

binding 元素的 sslAutoReload 属性值为 true 时,扫描与绑定相关的密钥和信任存储文件以查找更改的频率,有关详细信息,请参阅 绑定。以秒为单位。默认值为 5

maxRequestHeaderSize

HTTP 请求行和 HTTP 请求标头的最大允许大小。以字节为单位。默认值为 8192

maxResponseHeaderSize

HTTP 响应标头的最大允许大小。以字节为单位。默认值为 8192

1.2. 绑定

web 元素应包含至少一个 binding 元素,以配置客户端如何连接到 web 服务器。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 属性控制,有关详细信息,请参阅 Web。默认值为 false

1.3. 应用

每个 web 应用程序都应在 binding 元素内的 app 元素中定义。app 元素具有以下属性

url

要用于 web 应用程序的上下文。

war

磁盘上的 web 应用程序归档文件的名称。

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. 系统属性

可以使用系统属性添加或更新 web 配置项。如果您定义以 "webconfig." 开头的系统属性,它将在启动时被解析以更新 web 配置。

要为名为 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. 管理

嵌入式 web 服务器可以通过任何可用的管理界面停止、启动或重启,方法是分别在 ActiveMQServerControl 上使用 stopEmbeddedWebServerstarteEmbeddedWebServerrestartEmbeddedWebServer 操作。