为Microsoft IIS配置ISAPI重定向器

Posted 奥兰王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为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)。该值不区分大小写。在本文档中,我们将坚持falsetrue

属性描述
extension_uri

指向ISAPI扩展名/jakarta/isapi_redirect.dll的字符串值

log_file

指向将在其中创建日志文件的位置的值。(例如c: tomcat logs isapi.log
如果指定了日志轮换设置之一(log_rotationtimelog_filesize),则实际的日志文件名将基于此设置。如果日志文件名包含任何‘%‘字符,则将其视为格式字符串strftime(3),例如c: tomcat logs isapi-%Y-%m-%d-%H_%M_%S.log否则,将自动添加后缀.nnnnnnnnnn,该时间以秒为单位。可以在Apache Rotatelogs文档中找到格式字符串替换的完整列表。

log_level

日志级别的字符串值(可以是调试,信息,警告,错误或跟踪)。

在1.2.31版中添加了此指令

log_rotationtime

日志文件轮换之间的时间(以秒为单位)。将此设置为0(默认值)将禁用基于时间的日志轮换。

在1.2.31版中添加了此指令

log_filesize

日志文件的最大大小(以兆字节为单位),之后该文件将被轮换。将此设置为0(默认值)将禁用基于文件大小的日志轮换。
该值可以有一个可选的中号的后缀,即两个55M当它长到5MB将旋转日志文件。
如果指定了log_rotationtime,则忽略此设置。

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秒定期运行的后台线程定期维护。工作人员维护会检查空闲连接,更正负载状态并能够检测后端运行状况。

只有自上次维护以来至少worker.maintain 经过了几秒钟,才进行维护因此,将watchdog_interval设置得比设置小得多worker.maintain是没有用的。

默认值为0秒,这意味着将不创建看门狗线程,而是与常规请求结合进行维护。

该指令已在1.2.27版本中添加

error_page

一个字符串值,表示后端返回非200响应时的错误页面url重定向。此伪指令可用于自定义从后端服务器返回的错误消息。

该URL必须指向有效的服务器URL,并且可以包含格式字符串号(%d),该格式字符串号可用于按错误号分隔页面。在这种情况下,重定向网址的格式为,%d从 替换error_page为返回的错误号。

该指令已在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:	omcatlogsisapi_redirect.log

# Log level (debug, info, warn, error or trace)
log_level=info

# Full path to the workers.properties file
worker_file=c:	omcatconfworkers.properties

# Full path to the uriworkermap.properties file
worker_mount_file=c:	omcatconfuriworkermap.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_rotationtimelog_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:	omcatlogsisapi_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:	omcatlogsisapi_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-%dlog_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

以上是关于为Microsoft IIS配置ISAPI重定向器的主要内容,如果未能解决你的问题,请参考以下文章

IIS 配置Http重定向到Https

Isapi Rewrite 301 重定向解析为 404 - 循环引用?

win2012 数据版怎么搭建服务器

IIS 默认重定向

解决IIS部署Vue项目路由重定向问题

IIS HTTP重定向配置参数设置