为Microsoft IIS配置ISAPI重定向器
为Microsoft IIS配置ISAPI重定向器
要求
Tomcat重定向器需要三个实体:
- isapi_redirect.dll -IIS ISAPI重定向器插件,可以获取预构建的DLL或自行构建(请参见构建部分)。
- worker.properties-描述工作程序(Tomcat进程)使用的主机和端口的文件。可以在conf目录下找到一个worker.properties示例。
- uriworkermap.properties-将URL路径模式映射到工作程序的文件。也可以在conf目录下找到一个示例uriworkermap.properties。
安装包括以下部分:
- 使用默认的/ examples上下文配置ISAPI重定向器,并检查是否可以为IIS提供servlet。
- 向配置添加更多上下文。
请注意,在64位环境中-至少对于IIS 7-使用的IIS应用程序池应将“启用32位应用程序”设置为“ False”。否则,将不会调用重定向器并返回http代码404。如果您认为isapi_redirect.dll的32位版本会执行此操作,则会获得http代码500,因为该库无法加载到64位IIS中。
注册表设置
ISAPI重定向程序从注册表读取配置,创建一个新的注册表项,名为:
“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Apache Software Foundation \ Jakarta Isapi Redirector \ 1.0”
可以使用数字0(false)和1(true)作为值,或者使用off(false)和on(true)或任何其他以字母f开头的字符串来设置以下描述为“表示布尔值的字符串值”的属性(false),n(false), t(true)或y(true)。该值不区分大小写。在本文档中,我们将坚持false和true。
属性 | 描述 |
---|---|
extension_uri |
指向ISAPI扩展名/jakarta/isapi_redirect.dll的字符串值 |
log_file |
指向将在其中创建日志文件的位置的值。(例如c:\ tomcat \ logs \ isapi.log) |
log_level |
日志级别的字符串值(可以是调试,信息,警告,错误或跟踪)。 在1.2.31版中添加了此指令 |
log_rotationtime |
日志文件轮换之间的时间(以秒为单位)。将此设置为0(默认值)将禁用基于时间的日志轮换。 在1.2.31版中添加了此指令 |
log_filesize |
日志文件的最大大小(以兆字节为单位),之后该文件将被轮换。将此设置为0(默认值)将禁用基于文件大小的日志轮换。 |
worker_file |
字符串值,它是worker.properties文件的完整路径(例如c:\ tomcat \ conf \ workers.properties) |
worker_mount_file |
字符串值,它是uriworkermap.properties文件的完整路径(例如c:\ tomcat \ conf \ uriworkermap.properties) |
rewrite_rule_file |
字符串值,它是rewrite.properties文件的完整路径(例如c:\ tomcat \ conf \ rewrite.properties) |
shm_size |
共享内存的DWORD值大小。设置这个值是号码的所有定义的工人* 400(仅设置,如果你有这样的价值更多的则64个工作者) 该指令已在1.2.20版本中添加 从1.2.27版本开始,即使对于大量工作人员,共享内存的大小也会自动确定。不再需要此属性。 |
worker_mount_reload |
一个DWORD值,以秒为单位指定 重新加载worker_mount_file的时间。 该指令已在1.2.20版本中添加 |
strip_session |
表示布尔值的字符串值。如果将其设置为true,则如果Web服务器在本地提供URL会话后缀,则形式为“; jsessionid = ...”的URL会话后缀将被剥离。 默认值为false。 该指令已在1.2.21版中添加 |
auth_complete |
代表“ 0”或“ 1”的DWORD值。之所以需要这样做是因为与IIS 5.1的轻微不兼容。 默认情况下,它的值为1,这意味着我们使用SF_NOTIFY_AUTH_COMPLETE事件。如果将其设置为0,则我们使用SF_NOTIFY_PREPROC_HEADERS。使用PUT HTTP方法处理请求时,IIS 5.1可能需要这样做。 该指令已在1.2.21版中添加 |
uri_select |
一个字符串值,该值影响IIS和Tomcat之间URI的解码和重新编码方式。除非有充分的理由进行更改,否则应将其保留为默认值。 如果值为“ parsed”,则转发的URI将被解码,并且明确的路径组件(如“ ..”)将已解析。这不符合规范, 如果使用前缀转发规则,则不安全。 如果值为“ unparsed”,则转发的URI将是原始请求URI。它符合规范,也是最安全的选择。重写URI,然后转发重写的URI将不起作用。 如果值为“转义”,则转发的URI将是“已解析”所使用的URI的重新编码形式。诸如“ ..”之类的显式路径组件将已经解决。这不能与URL编码的会话ID结合使用。 如果值为“ proxy”,则转发的URI将是“ parsed”使用的URI的部分重新编码形式。诸如“ ..”之类的显式路径组件将已经解决。和有问题的将重新编码。 自版本1.2.24起,默认值为“ proxy”。在“解析”之前。 |
reject_unsafe |
表示布尔值的字符串值。如果将其设置为true,则在解码后仍包含百分号'%'或反斜杠'\'的URL将被拒绝。 大多数网络应用程序不使用此类URL。通过启用reject_unsafe,您可以阻止几种众所周知的URL编码攻击。 默认值为false。 该指令已在1.2.24版本中添加 |
collapse_slashes |
从1.2.44开始不推荐使用此选项,如果使用,则将被忽略。 在1.2.41版之前,从未进行折叠。从1.2.41版本开始,在查找卸载匹配之前崩溃是默认设置,以防止轻易绕过卸载规则。从1.2.44版本开始,总是在查找安装或卸载规则之前执行折叠。 此指令已在1.2.41版本中添加 |
watchdog_interval |
一个DWORD值,表示看门狗线程间隔,以秒为单位。工人由每个watchdog_interval秒定期运行的后台线程定期维护。工作人员维护会检查空闲连接,更正负载状态并能够检测后端运行状况。 只有自上次维护以来至少 默认值为0秒,这意味着将不创建看门狗线程,而是与常规请求结合进行维护。 该指令已在1.2.27版本中添加 |
error_page |
一个字符串值,表示后端返回非200响应时的错误页面url重定向。此伪指令可用于自定义从后端服务器返回的错误消息。 该URL必须指向有效的服务器URL,并且可以包含格式字符串号 该指令已在1.2.27版本中添加 |
enable_chunked_encoding |
表示布尔值的字符串值。如果将其设置为true,则服务器支持分块编码。 默认值为false。 该指令已在1.2.27版本中添加。在1.2.30版之前,它一直被认为是实验性的,仅在使用包含分块支持的特殊内部版本时才可用。从1.2.30开始,它不再被视为实验性的。 |
flush_packets |
表示布尔值的字符串值。如果将其设置为true,则在接收到每个AJP数据包时立即将数据刷新到客户端。否则,IIS将缓冲数据并仅在缓冲区已满或响应完成时才写入客户端。 默认值为false。 版本1.2.42中已添加此指令 |
使用属性文件进行配置
ISAPI重定向器可以从属性文件而不是注册表中读取其配置。这样的好处是,您可以在同一服务器上使用具有独立配置的多个ISAPI重定向器。重定向器将在初始化期间检查属性文件,并优先使用注册表(如果存在)。
在与名为isapi_redirect.properties的ISAPI重定向器相同的目录中创建一个属性文件,即,名称与ISAPI重定向器DLL相同,但扩展名为.properties。可以在conf目录下找到一个示例isapi_redirect.properties。
属性文件中的属性名称和值与上述注册表设置相同。例如:
# Configuration file for the Tomcat ISAPI Redirector
# The path to the ISAPI Redirector Extension, relative to the website
# This must be in a virtual directory with execute privileges
extension_uri=/jakarta/isapi_redirect.dll
# Full path to the log file for the ISAPI Redirector
log_file=c:\tomcat\logs\isapi_redirect.log
# Log level (debug, info, warn, error or trace)
log_level=info
# Full path to the workers.properties file
worker_file=c:\tomcat\conf\workers.properties
# Full path to the uriworkermap.properties file
worker_mount_file=c:\tomcat\conf\uriworkermap.properties
笔记:
- 反斜杠-'\'-不是转义字符。
- 注释行以“#”开头。
从1.2.27版本开始,两个环境变量会自动添加到可以在.properties
文件内部使用的环境 。
- JKISAPI_PATH-ISAPI重定向器的完整路径。
- JKISAPI_NAME-ISAPI重定向器dll的名称,不带扩展名
# Use the logs in the installation path of ISAPI Redirector
log_file=$(JKISAPI_PATH)\$(JKISAPI_NAME).log
日志文件轮换
版本为1.2.31的ISAPI重定向器可以执行日志轮换,其配置和行为类似于Apache HTTP Server随附的 rotatelogs程序。
要配置日志轮换,请配置log_file以及log_rotationtime或log_filesize选项之一。如果两者都指定,则log_rotationtime将优先,而log_filesize将被忽略。
例如,配置日志文件的每日轮转:
# Configuration file for the Tomcat ISAPI Redirector
...
# Full path to the log file for the ISAPI Redirector
log_file=c:\tomcat\logs\isapi_redirect.%Y-%m-%d.log
# Log level (debug, info, warn, error or trace)
log_level=info
# Rotate the log file every day
log_rotationtime=86400
...
或配置日志文件达到5MB时的轮播:
# Configuration file for the Tomcat ISAPI Redirector
...
# Full path to the log file for the ISAPI Redirector
log_file=c:\tomcat\logs\isapi_redirect.%Y-%m-%d-%H.log
# Log level (debug, info, warn, error or trace)
log_level=info
# Rotate the log file at 5 MB
log_filesize=5M
...
只要达到配置的限制,日志就会轮换,但前提是日志文件名会更改。如果您在其中配置strftime(3)
格式代码的日志文件名,请确保其指定的粒度与配置的轮转时间相同,例如,如果每天轮转,则为%Y-%m-%d(log_rotationtime = 86400)。
有关更多示例,请参见rotatelogs文档。
使用简单的重写规则
版本为1.2.16的ISAPI重定向器可以执行简单的URL重写。尽管不如Apache HTTP Server的mod_rewrite强大,但它允许简单地交换请求URI
规则的形式为original-url-prefix = forward-url-prefix。例如:
# Simple rewrite rules, making examples
# available under shorter URLs
/jsp/=/examples/jsp/
/servlets/=/examples/servlets/
如果您在规则前面加上波浪号,也可以使用正则表达式~
:
# Complex rewrite rule, prefixing "/examples/"
# to the first path component of all requests
~/([^/]*)=/examples/$1
请注意,uriworkermap.properties必须在重写之前使用URL。
参考资料:
http://tomcat.apache.org/connectors-doc/reference/iis.html