JkOptions 指令允许您设置许多转发选项,这些选项将启用 (+) 或禁用 (-) 以下选项。不带任何前导符号的选项将被启用。
以下四个选项 +ForwardURIxxx 是互斥的。必须且只能选择其中一个,不允许带负号前缀。从 1.2.24 版本开始,默认值为“ForwardURIProxy”。在 1.2.23 版本中是“ForwardURICompatUnparsed”,直到 1.2.22 版本都是“ForwardURICompat”。您可以通过开启其他两个选项中的一个来关闭默认设置。除非您有非常充分的理由,否则您应将其保留为默认值。
所有选项都从全局服务器继承到虚拟主机。支持启用(加号选项)和禁用(减号选项)的选项,按以下方式继承:
options(vhost) = plus_options(global) - minus_options(global) + plus_options(vhost) - minus_options(vhost)
使用 JkOptions ForwardURIProxy,转发的 URI 在 Apache 内部处理后和转发到 Tomcat 之前会进行部分重新编码。这将与 mod_rewrite 的本地 URL 操作以及 URL 编码的会话 ID 兼容。
JkOptions +ForwardURIProxy
使用 JkOptions ForwardURICompatUnparsed,转发的 URI 将保持未解析状态。它符合规范且安全。它将始终转发原始请求 URI,因此使用 mod_rewrite 重写 URI 然后转发重写后的 URI 将不起作用。
JkOptions +ForwardURICompatUnparsed
使用 JkOptions ForwardURICompat,转发的 URI 将由 Apache 解码。编码字符将被解码,并且像“..”这样的显式路径组件将已被解析。这不太符合规范,并且如果您使用前缀 JkMount,则不安全。此选项允许在转发之前使用 mod_rewrite 重写 URI。
JkOptions +ForwardURICompat
使用 JkOptions ForwardURIEscaped,转发的 URI 将是 ForwardURICompat 使用的 URI 的编码形式。像“..”这样的显式路径组件将已被解析。这不能与 URL 编码的会话 ID 结合使用,但它允许在转发之前使用 mod_rewrite 重写 URI。
JkOptions +ForwardURIEscaped
JkOptions RejectUnsafeURI 将阻止所有在解码后包含百分号 '%' 或反斜杠 '\' 的 URL。
大多数 Web 应用程序不使用此类 URL。使用 RejectUnsafeURI 选项,您可以阻止几种众所周知的 URL 编码攻击。默认情况下,此选项未设置。
您也可以使用 mod_rewrite 实现此类检查,它更强大但也稍微复杂一些。
JkOptions +RejectUnsafeURI
JkOptions CollapseSlashesAll 自 1.2.44 版起已弃用,如果使用将被忽略。
JkOptions CollapseSlashesUnmount 自 1.2.44 版起已弃用,如果使用将被忽略。
JkOptions CollapseSlashesNone 自 1.2.44 版起已弃用,如果使用将被忽略。
JkOptions ForwardDirectories 与 Apache 的 DirectoryIndex 指令结合使用。因此,mod_dir 应该静态或动态 (DSO) 可用于 Apache。
当配置 DirectoryIndex 时,Apache 将为指令中指定的每个本地 URL 创建子请求,以确定是否存在匹配的本地文件(通过 stat 文件完成)。
如果 ForwardDirectories 设置为 false(默认值)且 Apache 未找到任何匹配文件,Apache 将提供目录内容(如果 Options 指令指定了该目录的 Indexes)或返回 403 Forbidden
响应(如果 Options 指令未指定该目录的 Indexes)。
如果 ForwardDirectories 设置为 true 且 Apache 未找到任何匹配文件,请求将被转发到 Tomcat 进行解析。这用于 Apache 由于各种原因无法在文件系统上看到索引文件的情况:Tomcat 运行在不同的机器上,JSP 文件已预编译等。
请注意,本地可见的文件将优先于仅 Tomcat 可见的文件(即,如果 Apache 可以看到该文件,则将提供该文件)。如果 Tomcat 通常提供多种类型的文件——例如 Velocity 页面和 JSP 页面——这一点很重要。
JkOptions +ForwardDirectories
设置 JkOptions ForwardLocalAddress,您要求 mod_jk 发送 Apache HTTP 服务器的本地地址而不是远程客户端地址。这可由 Tomcat 远程地址阀用于仅允许来自配置的 Apache 服务器的连接。
JkOptions +ForwardLocalAddress
设置 JkOptions ForwardPhysicalAddress,您要求 mod_jk 将物理对等 TCP IP 地址作为客户端地址发送。默认情况下,mod_jk 使用 Web 服务器提供的逻辑地址。例如,mod_remoteip 模块将逻辑 IP 地址设置为代理在 X-Forwarded-For
头部中转发的客户端 IP。
JkOptions +ForwardPhysicalAddress
JkOptions FlushPackets,您要求 mod_jk 在从 Tomcat 接收到每个 AJP 数据包块后刷新 Apache 的连接缓冲区。此选项可能对 Apache 和 Tomcat 造成严重的性能损失,因为写入操作比通常所需的频率更高(例如:在每个响应结束时)。
JkOptions FlushHeader,您要求 mod_jk 在从 Tomcat 接收到响应头后刷新 Apache 的连接缓冲区。
JkOptions DisableReuse,您要求 mod_jk 在连接使用后立即关闭它们。通常,mod_jk 使用持久连接并池化空闲连接以在新请求需要发送到 Tomcat 时重用它们。
使用此选项将对 Apache 和 Tomcat 造成严重的性能损失。仅在出现无法修复的网络问题时,才将其作为最后手段使用。如果 Apache 和 Tomcat 之间的防火墙悄悄地终止空闲连接,请尝试结合在您的操作系统中使用适当的 TCP keepalive 值来使用工作器属性 socket_keepalive。
JkOptions ForwardKeySize,在使用 ajp13 时,您要求 mod_jk 也转发 Servlet API 2.3 所需的 SSL 密钥大小。当 Servlet 引擎是 Tomcat 3.2.x 时,不应设置此标志(默认关闭)。
JkOptions +ForwardKeySize
JkOptions ForwardSSLCertChain,在使用 ajp13 时,您要求 mod_jk 转发 SSL 证书链(默认关闭)。Mod_jk 仅将 SSL_CLIENT_CERT
传递给 AJP 连接器。对于自签名证书或由根 CA 证书直接签名的证书,这不是问题。但是,有大量由中间 CA 证书签名的证书,这构成了一个重大问题:Servlet 将无法自行验证客户端证书。通过 AJP 连接器将 SSL_CLIENT_CERT_CHAIN
传递给 Tomcat 可以修复此错误。
此指令仅在 1.2.22 版本及更高版本中存在。
JkOptions +ForwardSSLCertChain
指令 JkEnvVar 允许您将环境变量从 Apache 服务器转发到 Tomcat 引擎。您可以将默认值作为第二个参数添加到指令中。如果未显式给出默认值,则变量仅在运行时设置时才会被发送。
这些变量可以在 Tomcat 端通过 request.getAttribute(attributeName) 作为请求属性检索。请注意,通过 JkEnvVar 发送的变量不会列在 request.getAttributeNames() 中。
这些变量从全局服务器继承到虚拟主机。
JkEnvVar SSL_CLIENT_V_START undefined