您的位置:首页 > 运维架构 > 网站架构

Jetty9架构解析-Jetty配置及部署(二)

2017-06-05 10:14 1491 查看

2.2. Jetty配置方式

除了Jetty配置及部署(一)介绍的命令行参数、ini和XML(Jetty IoC)文件的默认配置方式外,Jetty也为我们提供了其它灵活的配置方案。

由于Jetty的服务器对象(如Server、链接器、Context等)都是POJO,因此从理论上讲,我们可以采用编程的方式配置Jetty,这便是嵌入式Jetty所完成的工作。不仅如此,我们还可以采用其它IoC框架配置Jetty服务器。例如官方即支持通过Spring容器进行配置及实例化Jetty服务器。只要启动模块中包含了spring(模块名),我们就可以直接使用Spring的Bean配置文件来替代Jetty IoC文件。在讲解Web应用部署时,你将会看到一个采用Spring进行部署配置的示例。

总之,Jetty对IoC框架集成的机制非常灵活,只要愿意,我们可以非常容易的实现自己的替代方案,具体实现方式可以参见“扩展篇”。

注意:与Tomcat相比,Jetty的可扩展性做的非常出色。除了它的模块化架构,各个组件的可扩展性也充分说明了这一点。这也是Jetty进行嵌入式开发如此便捷的原因,而Tomcat的服务器生命周期处理,有部分是与其Catalina容器配置解析耦合在一起的,因此如果要进行嵌入式开发,则需要做额外的适配工作。

2.3. Jetty配置方式

本节主要讲解Jetty相关的启动配置,包括加载规则和常见的启动参数。

2.3.1. 加载规则

从前面的讲解我们知道,Jetty有三种方式添加命令行启动参数:命令行添加、start.ini、start.d/*.ini(大多数情况下,start.ini和start.d不必两者都保留,只需要两者择其一即可)。对于这三种方式,如果存在重复的配置,Jetty将自行进行覆盖。其具体规则是命令行的优先级最高,start.d目录次之,start.ini文件最低。这也符合我们对配置灵活性的要求,保证最灵活的方式优先级最高。

2.3.2. 常见启动参数

下面我们整理了部分常用的Jetty启动参数及其用途说明,你可以根据需要采用任意一种方式配置使用,如表2-1所示。

注意:所有JVM相关的参数也可以直接通过ini文件设置,此处不再赘述。

表2-1 Jetty常见启动参数

参数所属模块说明
jetty.http.hosthttpHTTP链接器绑定的主机地址,默认本机所有有效IP地址。
jetty.http.porthttpHTTP链接器监听的端口号,默认为8080。
jetty.http.idleTimeouthttpHTTP链接的最大空闲时间,单位为毫秒,默认为30000。
jetty.http.soLingerTimehttpHTTP链接器Socket Linger时间,默认为-1,即禁用。
jetty.http.acceptorshttpHTTP链接器用于接收请求的线程数量,默认为-1,Jetty基于处理器核数选择一个值,具体规则是低于16核为1,低于24核为2,低于32核为3,32核以上为4。
jetty.http.selectorshttpSocket selector的数量,默认为-1,Jetty基于处理器核数选择一个值,具体规则是低于4核为1,低于8核为3,8核以上为4。
jetty.http.acceptorQueueSizehttp用于设置ServerSocket绑定时的backlog值,输入连接指示(对连接的请求)的最大队列长度。如果队列满时收到连接指示,则拒绝该连接。
jetty.threadPool.minThreadsserverJetty线程池最小线程数,默认为10。
jetty.threadPool.maxThreadsserverJetty线程池最大线程数,默认为200。
jetty.threadPool.idleTimeoutserverJetty线程池线程空闲超时时间,单位为毫秒,默认为60000。
jetty.httpConfig.secureSchemeserverHTTP安全重定向时,URI的Scheme,默认为https。
jetty.httpConfig.securePortserverHTTP安全重定向端口,默认为8443。
jetty.httpConfig.outputBufferSizeserverHTTP响应内容缓冲大小,单位为字节,默认为32768。
jetty.httpConfig.outputAggregationSizeserver可以缓冲的响应内容最大写入长度,单位为字节,默认为8192。
jetty.httpConfig.requestHeaderSizeserverHTTP请求头的最大值,单位为字节,默认为8192。
jetty.httpConfig.responseHeaderSizeserverHTTP响应头的最大值,单位为字节,默认为8192。
jetty.server.stopAtShutdownserver在控制台按下ctrl+c停止Jetty服务器。
jetty.server.stopTimeoutserverJetty优雅停止的超时时间,单位为毫秒,默认5000。
jetty.server.dumpAfterStartserverJetty启动之后,输出服务器、组件以及Web应用的状态。
jetty.server.dumpBeforeStopserverJetty关闭之前,输出服务器、组件以及Web应用的状态。
jetty.ssl.hostsslTLS/SSL链接器绑定的主机地址,默认本机所有有效的IP地址。
jetty.ssl.portsslTLS/SSL链接器监听的端口,默认为8443。
jetty.ssl.idleTimeoutsslTLS/SSL链接器空闲超时时间,单位为毫秒,默认30000。
jetty.ssl.soLingerTimesslTLS/SSL链接器Socket Linger时间,默认为-1,即禁用。
jetty.ssl.acceptorssslTLS/SSL链接器用于接收请求的线程数量。
jetty.ssl.selectorssslTLS/SSL链接器Socket selector的数量。
jetty.ssl.acceptorQueueSizessl设置TLS/SSL链接器ServerSocket绑定时的backlog值
jetty.ssl.sniHostCheckssl是否检查请求主机名是否匹配SNI 名称。
jetty.ssl.stsMaxAgeSecondsssl设置Strict-Transport-Security 响应头的过期时间,单位为秒,默认为3153600。
jetty.sslContext.keyStorePathssl密钥库文件路径,相对于$JETTY_BASE。
jetty.sslContext.trustStorePathssl信任库文件路径,相对于$JETTY_BASE。
jetty.sslContext.keyStorePasswordssl密钥库密码。
jetty.sslContext.keyStoreTypessl密钥库类型(JCEKS、JKS、DKS、PKCS11、PKCS12)。
jetty.sslContext.keyStoreProviderssl密钥库提供者。
jetty.sslContext.keyManagerPasswordsslKeyManager密码。
jetty.sslContext.trustStorePasswordssl信任库密码。
jetty.sslContext.trustStoreTypessl信任库类型(JCEKS、JKS、DKS、PKCS11、PKCS12)。
jetty.sslContext.trustStoreProviderssl信任库提供者。
jetty.sslContext.needClientAuthssl是否要求客户端证书认证,如果为true并且客户端选择不提供自身的验证信息,则协商将会停止。
jetty.sslContext.wantClientAuthssl是否请求客户端证书认证,如果为true并且客户端选择不提供其自身的验证信息,则协商将会继续。
jetty.sslContext.sslSessionCacheSizesslSSL会话缓存大小。
jetty.sslContext.sslSessionTimeoutsslSSL会话缓存超时时间,单位为秒。
jetty.gzip.minGzipSizessl指定一个HTTP响应内容长度的限制,当超过该值时,Jetty启动GZIP压缩。
jetty.gzip.compressionLevelsslGZIP压缩级别。
jetty.gzip.excludedUserAgentssl正则表达式,用于指定禁用GZIP的User Agent。如果请求的User Agent匹配该表达式,则将不启用GZIP压缩。默认为.MSIE.6.0.,即IE6不支持GZIP压缩。
jetty.deploy.monitoredDirdeployJetty部署模块监控目录,相对于$JETTY_BASE,用于热部署监控文件变更。
jetty.deploy.monitoredPathdeployJetty部署模块监控路径(绝对目录),用于热部署监控文件变更。
jetty.deploy.defaultsDescriptorPathdeployWeb应用使用的默认部署描述文件,该文件中的配置信息将会被所有Web应用继承,默认为/etc/webdefault.xml。
jetty.deploy.scanIntervaldeployJetty部署模块扫描监控目录的时间间隔,单位为秒,默认为1秒。
jetty.deploy.extractWarsdeploy是否解压WAR包,默认为true。
jetty.jmxremote.rmihostjmx-remoteJMX远程访问绑定的RMI主机地址。
jetty.jmxremote.rmiportjmx-remoteJMX远程访问RMI监听的端口,默认为1999。
Jetty在启动时,会自动获取参数的键值对,并在加载各个模块时,将参数值以IoC的方式注入到各个组件对象。这是Jetty与Tomcat在参数处理方面的一大区别,Tomcat参数均以硬编码的方式进行读取,即便我们可以通过参数去控制Tomcat组件的行为,但是对于参数本身我们却无法控制。而Jetty则是在用IoC的方式构造组件对象时动态注入,因此方案更加灵活。我们完全可以通过更改IoC文件来增加、修改甚至删除相关参数,Tomcat则无法做到这一点。

注意:将参数读取加载与IoC框架结合的优势就是,在支持IoC框架的可替代性的同时,又不会降低系统的可配置性。针对Jetty的参数处理方式,相信熟悉Spring的读者会非常容易找到替代方案。

新书上市



《Tomcat架构解析》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jetty 服务器