Apache Tomcat连接器-Web服务器操作方法
Posted 奥兰王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Tomcat连接器-Web服务器操作方法相关的知识,希望对你有一定的参考价值。
用于Micrsoft IIS HowTo的ISAPI重定向器
介绍
本文档说明了如何为IIS设置ISAPI重定向器以与Tomcat合作。
通常,IIS无法执行Servlet和Java Server Pages(JSP),将IIS配置为使用ISAPI重定向程序插件将使IIS将Servlet和JSP请求发送到Tomcat(并以此方式将它们提供给客户端)。
建议您还阅读 Workers HowTo文档,以了解如何在Web服务器和Tomcat引擎之间设置工作实体。对于更详细的配置信息,请查询参考指南 workers.properties, uriworkermap 和IIS。
文件惯例和假设
$ {tomcat_home}是tomcat的根目录。Tomcat安装应包含以下子目录:
- $ {tomcat_home} conf-您可以在其中放置各种配置文件的位置
- $ {tomcat_home} webapps-包含示例应用程序
- $ {tomcat_home} bin-放置Web服务器插件的位置
在本文档的所有示例中,$ {tomcat_home}将为c: tomcat。工作者定义为要从IIS服务器接受工作的tomcat进程。
支持的配置
IIS到Tomcat重定向器支持以下功能:
- 在Windows 8.1或更高版本上运行的IIS
- 在Windows Server 2012或更高版本上运行的IIS
- Tomcat 7或更高版本
重定向器可以与在旧版Windows上运行的IIS一起使用,但不支持此类配置。
mod_jk模块使用AJP协议将请求发送到Tomcat容器。使用的AJP版本是ajp13。所有当前版本的Tomcat都支持ajp13协议。其他Servlet引擎(例如Jetty和 JBoss)也支持ajp13协议。
它是如何工作的 ?
- ISAPI重定向器是Microsoft IIS插件(过滤器+扩展名)。IIS加载重定向器插件,并为每个传入的请求调用其筛选器功能。
- 然后,过滤器将针对uriworkermap.properties中保存的URI路径列表测试请求URL。如果当前请求与URI路径列表中的条目之一匹配,则过滤器会将请求传输到扩展名。
- 该扩展收集请求参数,并使用定义的协议(如ajp13)将其转发给适当的工作程序。
- 该扩展程序收集工作程序的响应并将其返回到浏览器。
安装
可从Apache Tomcat连接器下载页面获得用于32位和64位环境的ISAPI重定向器插件的预构建版本isapi_redirect.dll 。您还可以从Tomcat连接器源发行版本地构建副本。ISAPI重定向器需要三个实体:
- isapi_redirect.dll-用于Microsoft IIS插件的ISAPI重定向器,可以获取预构建的DLL或自行构建(请参见构建部分)。
- worker.properties-描述工作程序(Tomcat进程)使用的主机和端口的文件。可以在conf目录下找到一个worker.properties示例。
- uriworkermap.properties-将URL路径模式映射到工作程序的文件。也可以在conf目录下找到一个示例uriworkermap.properties。
安装包括以下部分:
- 使用默认的/ examples上下文配置ISAPI重定向器,并检查是否可以为IIS提供servlet。
- 向配置添加更多上下文。
配置ISAPI重定向器
这些说明是基于Windows Server 2012 R2编写的,并已在Windows 10 / Windows Server 2019之前的所有受支持Windows操作系统上进行了测试。
这些安装说明已经过使用IIS 9和ISAPI Extensions和Filters的默认安装在干净,完全修补的OS安装上进行了测试,并在C: Program Files Apache Software Foundation Tomcat 9.0中安装了Tomcat 9 。在本文档的其余部分中,这称为$ {tomcat_home}。
- 创建目录$ {tomcat_home} isapi
- 允许IIS进程创建ISAPI重定向器日志文件。如果要将日志文件写入其他目录,请根据需要修改路径。在命令提示符下输入以下内容:
>icacls "C:Program FilesApache Software FoundationTomcat 9.0isapi" /grant "IIS APPPOOLDefaultAppPool":(OI)(CI)M
- 下载适合您的操作系统的(32位或64位)isapi_redirect.dll,并将其放在$ {tomcat_home} isapi中
- 设置isapi_redirect.dll的权限。在Windows Server 2019上,似乎有必要明确设置此dll的权限。在命令提示符下输入以下内容:
>icacls "C:Program FilesApache Software FoundationTomcat 9.0isapiisapi_redirect.dll" /grant "Everyone":RX
- 创建$ {tomcat_home} isapi isapi_redirect.properties文件以配置ISAPI重定向器。也可以通过注册表设置执行配置-参见下文。该文件的内容应为:
extension_uri=/jakarta/isapi_redirect.dll log_file=C:Program FilesApache Software FoundationTomcat 9.0isapiisapi_redirect.log log_level=info worker_file=C:Program FilesApache Software FoundationTomcat 9.0isapiworkers.properties worker_mount_file=C:Program FilesApache Software FoundationTomcat 9.0isapiuriworkermap.properties
- 创建$ {tomcat_home} isapi workers.properties文件以配置将请求传递到的Tomcat实例。对于本地计算机上的单个Tomcat实例,此文件的内容应为:
worker.list=tomcat01 worker.tomcat01.type=ajp13 worker.tomcat01.host=localhost worker.tomcat01.port=8009
- 创建$ {tomcat_home} isapi uriworkermap.properties文件以配置将哪些请求传递到Tomcat。要公开示例Web应用程序,此文件的内容应为:
/examples/*=tomcat01
- 使用IIS管理控制台,将新的虚拟目录添加到IIS网站。在全新安装中,这将是默认网站。虚拟目录的名称必须为jakarta。它的物理路径应该是放置isapi_redirect.dll的目录。
- 在管理控制台中选择新创建的虚拟目录,然后双击Handler Mappings。选择(当前禁用的) ISAPI-dll条目,然后在操作窗格中单击“ 编辑功能权限 ”。在打开的对话框中,选择“ 执行 ”,以选择所有三个权限。单击“ 确定”,ISAPI-dll现在应处于启用状态。
- 再次使用IIS管理控制台,将ISAPI重定向器作为过滤器添加到您的网站。选择您的网站,然后双击ISAPI筛选器。从操作窗格中,单击添加...。对于过滤器名称,请使用tomcat ,并且可执行文件应为isapi_redirect.dll的完整路径。配置完成后,点击确定。
- 仍在使用IIS管理控制台,按允许配置ISAPI重定向器。选择您的服务器(不是网站),然后双击“ ISAPI和CGI限制”。从操作窗格中,单击添加...。选择isapi_redirect.dll,添加描述(例如tomcat)并选择“ 允许扩展路径执行”,然后单击“ 确定”。
- 重新启动IIS(停止+启动IIS服务)。
就是这样,您现在应该启动Tomcat并要求IIS为您提供/ examples上下文。例如,尝试使用http:// localhost / examples / 并执行一些Servlet或JSP示例。
如果此操作无法成功进行,请参阅下面的“故障排除”部分,以获取有关纠正问题的帮助。
IIS日志记录
如果IIS访问日志显示诸如/jakarta/isapi_redirect.dll 而不是/ examples / servlets之类的条目,则可以通过IIS管理控制台进行更正。选择您的服务器(不是网站),然后双击Modules。在“ 操作”窗格中,单击“ 查看有序列表...”,选择IsapiFilterModule并将其向上移动,直到它位于HttpLoggingModule上方。
注册表配置
作为使用isapi_redirector.properties文件的替代方法,可以通过注册表配置ISAPI重定向器。为此,请按照下列步骤操作:
- 在注册表中,创建一个名为“ HKEY_LOCAL_MACHINE SOFTWARE Apache Software Foundation Jakarta Isapi Redirector 1.0”的新注册表项。
- 添加名称为extension_uri的字符串值和/jakarta/isapi_redirect.dll的值
- 添加一个名称为log_file的字符串值和一个指向您希望日志文件存放的位置的值(例如c: tomcat logs isapi.log)。
- 添加名称为log_level的字符串值和您的日志级别的值(可以是debug,info,error或emerg)。
- 添加一个名称为worker_file的字符串值,该值是worker.properties文件的完整路径(例如c: tomcat conf workers.properties)
- 添加一个名称为worker_mount_file的字符串值,该值是uriworkermap.properties文件的完整路径(例如c: tomcat conf uriworkermap.properties)
64位笔记
在64位环境中,使用的IIS应用程序池应将“启用32位应用程序”设置为“ False”。要对此进行检查,请在IIS管理控制台中选择“ 应用程序池 ”,然后右键单击您正在使用的池,然后选择“ 设置应用程序池默认值...”。在“ 常规”部分中可以找到启用32位应用程序。如果配置不正确,将不会调用重定向器,并且IIS将返回HTTP代码404。
您必须在64位操作系统上使用ISAPI重定向器的64位版本。如果尝试使用32位版本,则由于该库无法加载到64位IIS中,因此每个请求都会获得HTTP代码500。
添加其他上下文
示例上下文对于验证安装很有用,但是您还需要添加自己的上下文。添加新上下文需要两项操作:
- 将上下文添加到Tomcat(我将不再谈论它)。
- 将上下文添加到ISAPI重定向器。
向ISAPI重定向器添加上下文很简单,您所需要做的就是编辑uriworkermap.properties并添加如下所示的行:
/context/*=worker_name
工人及其名称是在worker.properties中定义的,默认情况下worker.properties带有一个名为“ defworker”的预先配置的工人,因此您可以使用它。例如,如果要添加一个名为“ shop”的上下文,则应添加到uriworkermap.properties的行将为:
/shop/*=defworker
以上应该是IIS将与Tomcat上下文(webapp)对应的任何URI的任何请求传递给Tomcat所需要的。
高级上下文配置
如果您的网站管理员非常忙(每秒超过100个请求,或同时存在100个以上的客户端连接),则有时可能希望让IIS直接提供静态内容(html,gif,jpeg等),即使这些文件是Tomcat服务的上下文的一部分。允许IIS直接为此类文件提供服务可能会避免包括通过重定向器将请求传递给Tomcat的小开销,并且可以通过仅使用IIS处理仅Tomcat可以处理的请求(例如,对JSP页面和Java的请求)来释放Tomcat servlet)。
例如,考虑示例上下文中的html和gif文件:您可以直接通过IIS提供这些文件;无需通过Tomcat流程为其提供服务。
但是,在实现以下配置样式时,应该非常小心,因为这样做实际上是为IIS提供了一个“后门”,并允许它在Tomcat不了解的情况下从Tomcat上下文中提供文件,从而绕开了它。 Tomcat本身和Tomcat上下文(webapp)可能对这些文件施加的任何安全限制。使IIS服务作为Tomcat上下文一部分的静态文件需要满足以下条件:
- 配置IIS以了解Tomcat上下文
- 配置重定向器以将静态文件留给IIS
向IIS中添加Tomcat上下文需要添加一个覆盖Tomcat上下文的新IIS虚拟目录。例如,添加一个覆盖c: tomcat webapps examples目录的/ example IIS虚拟目录。
配置重定向器有些困难,您将需要指定要Tomcat处理的确切URL-路径模式(通常仅JSP文件和servlet)。这需要对uriworkermap.properties进行更改:
For the examples context it requires to replace the following line
/examples/*=defworker
with the following two lines
/examples/*.jsp=defworker
/examples/servlet/*=defworker
如您所见,第二种配置更为明确,它实际上指示重定向器将请求仅重定向到/ examples / servlet /下的资源以及名称以.jsp结尾的/ examples /下的资源。
您甚至可以更加明确,并提供以下行:
/example/servlets/chat=defworker
指示重定向器将其URL路径与前导字符串“ / example / servlets / chat”匹配的所有请求重定向到名为defworker的工作器。
保护您的Tomcat上下文的内容
再次注意,通过允许IIS直接访问Tomcat上下文的内容,您有可能绕过Tomcat对内容的保护。因此,如果需要,您应该确保使用相应的IIS管理控制台功能在IIS级别保护此内容。
特别是,每个Servlet应用程序(上下文)都有一个名为WEB-INF的特殊目录,其中包含敏感的配置数据和Java类,并且应始终对Web用户隐藏该目录。使用IIS管理控制台可以保护WEB-INF目录免受用户访问,但是考虑到这是一个普遍要求,并且考虑到很容易忘记在IIS级别上实现此保护,因此ISAPI重定向程序插件确实可以它会自动为您处理,并且会拒绝其URL路径中包含WEB-INF的任何请求。它还将拒绝其URL路径中包含META-INF的任何请求。
高级工作人员配置
有时,您可能想为不同的上下文提供不同的Tomcat进程(例如,将负载分散到不同的机器上)。为了实现这一目标,您将需要定义多个工作程序并将每个上下文分配给它自己的工作程序。
定义其他工作程序是在worker.properties文件中完成的。该文件包括两种类型的条目:
# An entry that lists all the workers defined
worker.list=worker1, worker2
# Entries that define the host and port associated with each of these workers
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.type=ajp13
worker.worker2.host=otherhost
worker.worker2.port=8009
worker.worker2.type=ajp13
上面的示例定义了两个工作程序,现在我们可以使用这些工作程序为两个不同的上下文提供服务,每个上下文都有自己的工作程序:
example uriworkermap.properties fragment
/examples/*=worker1
/webpages/*=worker2
如您所见,示例上下文由worker1服务,而 网页上下文由worker2服务。
在Workers HowTo 和worker.properties配置参考中有关使用和配置worker的更多信息。
构建ISAPI重定向器
重定向器是使用Microsoft Visual C ++开发的,因此,如果要执行自己的构建,则必须先安装Visual Studio。
您可以使用IDE GUI或基于nmake的纯命令行构建来构建源。IDE构建当前仅支持构建32位二进制文??件。nmake构建可用于32位,64位和Itanium二进制文件。
所有构建过程的通用步骤是:
- 将构建环境设置为32位或64位。IDE版本仅支持32位。
- 将源下载为zip文件并解压缩。
- 将目录更改为ISAPI重定向器源目录。
然后,进行IDE构建的步骤是:
- 使用“启动isapi.dsw”启动Visual Studio
- 在IDE启动期间,在所有转换弹出窗口中选择“是”。
- 接下来,在“配置”下拉菜单中选择“调试”或“发布”。
- 最后,在“构建”菜单中选择“构建解决方案”。
另外,nmake命令行构建的步骤是:
- 发出“ nmake -f Makefile.x86”以进行32位构建,或者
- 发出“ nmake -f Makefile.amd64”以进行64位构建
故障排除
第一次尝试安装ISAPI重定向器时,很容易无法使用。
如果您遇到这种情况,请按照以下步骤尝试纠正问题。
这些步骤并不能保证涵盖所有可能的问题,但是它们应该有助于发现典型的错误。
如果在这些步骤中进行了任何更正,请按照安装最后一步中的说明重新启动IIS服务,然后重试该步骤。
要启用错误跟踪,请确保正在记录网站活动。对于PWS 4.0,请确保在“个人Web管理器”的“高级选项”中选中了“保存网站活动日志”。
注意:这些步骤假定您的worker_mount_file设置指向uriworkermap.properties文件的未修改副本 。
如果worker_mount_file指向修改后的uriworkermap.properties 或uriworkermap.properties-auto文件,则结果可能会产生误导。如果直接访问Tomcat
,还假定“ / examples”上下文正确运行。
Win98的
启动IIS服务和Tomcat。
检查您在log_file设置中指定的ISAPI重定向器日志文件是否存在。如果找不到,请验证以下内容:
- 检查“ HKEY_LOCAL_MACHINE System CurrentControlSet Services W3SVC Parameters”键中的“ Filter DLLs”设置,并确保路径正确。
- 检查“ HKEY_LOCAL_MACHINE SOFTWARE Apache Software Foundation Jakarta Isapi Redirector 1.0”键的拼写。大小写并不重要,但是不正确的字母将阻止isapi_redirect.dll查找其注册表设置。
- 检查log_file设置是否有错字,名称和数据。此外,还要确保将在其中显示日志文件的目录已经存在。
在浏览器中 调用URL http:// localhost / examples /。大小写在Tomcat中很重要。URL中“ localhost”之后的字符必须为小写。如果该页面无法显示,请停止IIS服务(查看IIS日志文件所需)。然后检查SYSTEM / LogFiles / W3SVC1中的IIS日志文件中的最后一行:
如果最后一行包含:
GET "/examples/ HTTP/1.1" 404
则ISAPI重定向器无法识别它应该处理针对“ / examples”上下文的请求。检查以下内容:
- 检查extension_uri名称是否有错字。
- 检查worker_file设置是否有错字,名称和数据。
- 检查worker_mount_file设置的错字,名称和数据。
如果最后一行包含以下内容:
GET "/jakarta/isapi_redirect.dll HTTP1.1"
则ISAPI重定向器将识别出它应该处理该请求,但是无法成功使Tomcat服务该请求。
您应该在GET“ / ...”之后检查HTTP错误代码:
Error 404
GET "/..." 404
- 确保您输入正确的URL。
- 确保创建的虚拟目录名为“ jakarta”。它应该在Personal Web Manager中显示为“ / jakarta”(不带引号)。
- 确保extension_uri数据以“ / jakarta /”开头(不带引号)。
Error 500
GET "/..." 500
- 确保extension_uri设置中“ isapi_redirect.dll”紧跟在“ / jakarta /”之后。
- 检查worker.properties文件,并确保worker.ajp13.port的端口设置与server.xml中为“ AJP”连接器指定的端口相同。
Error 200 or 403
GET "/..." 200
GET "/..." 403
- 确保已在“个人Web管理器”的“高级选项”中选中了jakarta虚拟目录的“执行访问权限”。
如果以上设置正确,则index.html页面应出现在浏览器中。您还应该能够单击链接来执行一些Servlet或JSP示例。
WinNT / Win2K / WinXP
启动万维网发布服务和Tomcat。
检查您在log_file设置中指定的ISAPI重定向器日志文件是否存在。如果找不到,请检查以下内容:
- 检查您在IIS管理控制台中为过滤器设置的“可执行文件”,并确保路径正确。
- 检查“ HKEY_LOCAL_MACHINE SOFTWARE Apache Software Foundation Jakarta Isapi Redirector 1.0”键的拼写。大小写并不重要,但是不正确的字母将阻止isapi_redirect.dll查找其注册表设置。
- 检查log_file设置是否有错字,名称和数据。此外,还要确保将在其中显示日志文件的目录已经存在。
检查您添加的tomcat过滤器,并确保其状态显示绿色的向上箭头。如果没有,请检查以下内容:
- 检查worker_file设置是否有错字,名称和数据。
- 检查worker_mount_file设置的错字,名称和数据。
在浏览器中 调用URL http:// localhost / examples /。大小写在Tomcat中很重要。URL中“ localhost”之后的字符必须为小写。如果该页面无法显示,请检查SYSTEM32 / LogFiles / W3SVC1中IIS服务器日志文件中的最后一行。
最后一行应包含以下内容:GET“ /jakarta/isapi_redirect.dll HTTP1.1”,它表示ISAPI重定向器正在识别它应该处理该请求。
您应该在GET“ / ...”之后检查HTTP错误代码:
Error 404
GET "/..." 404
- 确保您输入正确的URL。
Error 500
GET "/..." 500
- 确保创建的虚拟目录名为“ jakarta”。
- 确保extension_uri设置正确。
- 检查worker.properties文件,并确保worker.ajp13.port的端口设置与server.xml中为“ AJP”连接器指定的端口相同。
Error 200 or 403
GET "/..." 200
GET "/..." 403
- 确保已在“个人Web管理器”的“高级选项”中选中了jakarta虚拟目录的“执行访问权限”。
如果以上设置正确,则index.html页面应出现在浏览器中。您还应该能够单击链接来执行一些Servlet或JSP示例。
参考资料:
http://tomcat.apache.org/connectors-doc/webserver_howto/iis.html
以上是关于Apache Tomcat连接器-Web服务器操作方法的主要内容,如果未能解决你的问题,请参考以下文章
Apache-Tomcat-Ajp漏洞(CVE-2020-1938)漏洞复现