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 请求的最小线程数。默认值为
8
或maxThreads
的值(如果更低)。 - idleThreadTimeout
-
在终止嵌入式 web 服务器中的空闲线程之前等待的时间。以毫秒为单位。默认值为
60000
。 - scanPeriod
-
当
binding
元素的sslAutoReload
属性值为true
时,扫描与绑定相关的密钥和信任存储文件以查找更改的频率,有关详细信息,请参阅 绑定。以秒为单位。默认值为5
。 - maxRequestHeaderSize
-
HTTP 请求行和 HTTP 请求标头的最大允许大小。以字节为单位。默认值为
8192
。 - maxResponseHeaderSize
-
HTTP 响应标头的最大允许大小。以字节为单位。默认值为
8192
。
1.2. 绑定
web
元素应包含至少一个 binding
元素,以配置客户端如何连接到 web 服务器。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
属性控制,有关详细信息,请参阅 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
替换: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. 系统属性
可以使用系统属性添加或更新 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
上使用 stopEmbeddedWebServer
、starteEmbeddedWebServer
和 restartEmbeddedWebServer
操作。