指令 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 应该可用于 Apache,无论是静态还是动态(DSO)。
当配置 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 之间的防火墙静默地杀死了空闲连接,请尝试使用 worker 属性 socket_keepalive 并结合操作系统中适当的 TCP keepalive 值。
JkOptions ForwardKeySize,您要求 mod_jk 在使用 ajp13 时,也转发 SSL 密钥大小,如 Servlet API 2.3 所需。当 servlet 引擎为 Tomcat 3.2.x 时,不应设置此标志(默认情况下关闭)。
JkOptions +ForwardKeySize
JkOptions ForwardSSLCertChain,您要求 mod_jk 在使用 ajp13 时,转发 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