HTTP 服务是 Application Server 的一个组件,它提供了用于部署 Web 应用程序的工具和使 HTTP 客户机可以访问已部署 Web 应用程序的工具。HTTP 服务借助于两种相关对象(虚拟服务器和 HTTP 侦听器)来提供这些工具。
本章讨论以下主题:
虚拟服务器(有时也称为虚拟主机)是一个允许同一个物理服务器来托管多个域名的对象。同一个物理服务器上托管的所有虚拟服务器共享该物理服务器的 Internet 协议 (Internet Protocol, IP) 地址。虚拟服务器将某个服务器的域名(例如 www.aaa.com)与运行 Application Server 的特定服务器关联起来。
请勿将 Internet 域与 Application Server 的管理域相混淆。
例如,假设您希望在物理服务器上托管以下这些域:
www.aaa.com www.bbb.com www.ccc.com
同时假设 www.aaa.com、www.bbb.com 和 www.ccc.com 分别将 Web 模块 web1、web2 和 web3 与之关联起来。
这意味着以下 URL 将全部由您的物理服务器处理:
http://www.aaa.com:8080/web1 http://www.bbb.com:8080/web2 http://www.ccc.com:8080/web3
第一个 URL 将被映射到虚拟主机 www.aaa.com,第二个 URL 将被映射到虚拟主机 www.bbb.com,第三个 URL 将被映射到虚拟主机 www.ccc.com。
另一方面,由于未向 www.bbb.com 注册 web3,以下 URL 将导致 404 返回码:
http://www.bbb.com:8080/web3
要使此映射有效,请确保 www.aaa.com、www.bbb.com 和 www.ccc.com 均可解析为物理服务器的 IP 地址。需要向您网络的 DNS 服务器注册这些域名。此外,在 UNIX 系统上,应将这些域添加到 /etc/hosts 文件中(如果 /etc/nsswitch.conf 文件中的 hosts 设置包括 files)。
Application Server 启动时,将自动启动以下虚拟服务器:
名为 server 的虚拟服务器,托管所有用户定义的 Web 模块。
名为 __asadmin 的虚拟服务器,托管所有与管理相关的 Web 模块(特别是管理控制台)。该服务器是一个受限制的服务器,您不能将 Web 模块部署到该虚拟服务器上。
如果是在非生产环境中开发、测试和部署 Web 服务,通常只需使用 server 虚拟服务器。在生产环境中,其他虚拟服务器可以为用户和客户提供托管工具,这样,尽管只有一个物理服务器,但每个用户和客户好像都有自己的服务器。
每个虚拟服务器都通过一个或多个 HTTP 侦听器来提供服务器与客户机之间的连接。每个 HTTP 侦听器都是包含 IP 地址、端口号、服务器名和默认虚拟服务器的侦听套接字。
HTTP 侦听器必须有唯一的端口号和 IP 地址的组合。例如,HTTP 侦听器可以通过将 IP 地址指定为 0.0.0.0,在计算机的给定端口侦听所有已配置的 IP 地址。HTTP 侦听器还可以为每个侦听器指定唯一的 IP 地址,但使用同一个端口。
由于 HTTP 侦听器是 IP 地址和端口号的组合,因此您可以拥有多个 IP 地址相同而端口号不同的 HTTP 侦听器(例如,1.1.1.1:8081 和 1.1.1.1:8082),或 IP 地址不同而端口号相同的 HTTP 侦听器(例如,1.1.1.1:8081 和 1.2.3.4:8081,如果已将计算机配置为可以响应这两个地址)。
但是,如果 侦听器使用 0.0.0.0 IP 地址侦听某个端口上的所有 IP 地址,则不能使用其他 IP 地址创建用于侦听同一端口上的特定 IP 地址的 HTTP 侦听器。例如,如果 HTTP 侦听器使用 0.0.0.0:8080(端口 8080 上的所有 IP 地址),则其他 HTTP 侦听器不能使用 1.2.3.4:8080。
由于运行 Application Server 的系统通常只能访问一个 IP 地址,因此 HTTP 侦听器通常使用 0.0.0.0 IP 地址和不同的端口号,其中每个端口号用于不同目的。如果系统可以访问多个 IP 地址,则每个地址可以用于不同目的。
默认情况下,Application Server 启动时,具有以下 HTTP 侦听器:
两个分别名为 http-listener-1 和 http-listener-2 的 HTTP 侦听器,这两个侦听器与名为 server 的虚拟服务器相关联。名为 http-listener-1 的侦听器未启用安全性;而名为 http-listener-2 的侦听器启用了安全性。
名为 admin-listener 的 HTTP 侦听器,该侦听器与名为 __asadmin 的虚拟服务器相关联。该侦听器已启用安全性。
所有这些侦听器均使用 IP 地址 0.0.0.0 和在安装 Application Server 过程中被指定为 HTTP 服务器端口号的端口号。如果 Application Server 使用默认端口号值,则 http-listener-1 使用端口 8080,http-listener-2 使用端口 8181,admin-listener 使用端口 4849。
每个 HTTP 侦听器都有一个默认虚拟服务器。当请求 URL 的主机组件与任何 HTTP 侦听器关联虚拟服务器(在虚拟服务器的 http-listeners 属性中列出 HTTP 侦听器,即可将虚拟服务器与该 HTTP 侦听器相关联)均不匹配时,HTTP 侦听器会将所有请求 URL 路由到默认虚拟服务器。
此外,还应指定 HTTP 侦听器中的接收器线程数。接收器线程就是等待连接的线程。它们用于接受连接并将其置于队列(称为连接队列)中,以便随后由工作线程拾取。您需要配置足够多的接收器线程,以便在新请求传入时始终有一个可用的线程,但是,线程数目不能过多,否则会占用过多的系统资源。连接队列中既包括接收器线程刚刚接受的新连接,又包括由保持活动连接管理子系统管理的持久性连接。
一组请求处理线程将从连接队列中检索传入的 HTTP 请求并处理这些请求。这些线程将解析 HTTP 头、选择相应的虚拟服务器并通过请求处理引擎以处理请求。如果没有更多要处理的请求,但连接可以保持持久性(通过使用 HTTP/1.1 或发送 Connection: keep-alive 标头),请求处理线程将假定连接处于空闲状态,并将连接传递给保持活动连接管理子系统。
保持活动子系统将定期轮询此类空闲连接,并将活动的连接排队到连接队列中,以便将来进行处理。请求处理线程将再次从连接队列中检索连接并处理其请求。保持活动子系统是多线程的,可以管理大约数万个连接。通过将大量连接分成较小的子集,使用有效的轮询技术来确定哪些连接已就绪并具有请求,以及哪些连接由于处于空闲状态的时间较长而被视为已关闭(超过允许的保持活动超时的最大值)。
HTTP 侦听器的服务器名就是在重定向过程中由服务器发送给客户机的 URL 中使用的主机名。此属性会影响服务器自动生成的 URL,但不会影响存储在服务器中的目录和文件的 URL。如果服务器使用别名,则此名称通常为别名。如果客户机发送了一个 Host: 标头,则在重定向过程中,该主机名将取代 HTTP 侦听器的服务器名值。
要使用不同于原始请求中指定的端口号的端口号,请指定重定向端口。如果出现以下情况之一,就会发生重定向:
如果客户机尝试访问指定 URL 处已不存在的资源(即该资源已被移动到其他位置),服务器将返回一个指定的响应代码,并在响应的位置标头中包含新的位置,从而将客户机重定向到新位置(而不是返回 404)。
如果客户机尝试通过常规 HTTP 端口访问受保护(如 SSL)的资源,则服务器会将此请求重定向到启用了 SSL 的端口。在这种情况下,服务器将在位置响应标头中返回一个新 URL,其中原始的不安全端口已被替换为启用了 SSL 的端口。客户机随后将连接到这个新的 URL。
此外,还应指定是否为 HTTP 侦听器启用安全性以及使用哪种类型的安全性(如使用哪一个 SSL 协议以及哪些加密算法)。
要访问部署在 Application Server 上的 Web 应用程序,请使用 URL http://localhost:8080/(或 https://localhost:8181/,如果此应用程序是安全的)以及为该 Web 应用程序指定的上下文根路径。要访问管理控制台,请使用 URL https://localhost:4849/ 或 https://localhost:4849/asadmin/(其默认上下文根路径)。
由于虚拟服务器必须指定一个现有的 HTTP 侦听器,并且不能指定其他虚拟服务器已使用的 HTTP 侦听器,因此在创建新的虚拟服务器之前,应至少创建一个 HTTP 侦听器。