Sun ONE Application Server 7, Update 1 管理员指南 |
配置 Web 服务器插件本 module 介绍 Sun ONE Application Server 如何处理超文本传输协议 (HTTP) 请求,以及如何配置并与 Sun ONE Application Server 一起使用 Web 服务器插件。此外,还介绍了如何配置并与 Microsoft IIS 和 Apache Web 服务器一起使用 Web 服务器插件。
本 module 包括以下主题:
- 关于 Web 服务器插件
- 处理客户机请求
- Web 服务器插件配置
- Web 服务器插件 SAF 参考
- 使用 Web 服务器插件
- 配置 Microsoft IIS 以使用 Web 服务器插件
- 配置 Web 服务器插件以用于 Apache 服务器
关于 Web 服务器插件
Web 服务器插件是 HTTP 反向代理插件,用于指示 Sun ONE Web Server 或 Sun ONE Application Server 将某些 HTTP 请求转发至其它服务器。例如,您可以对连接至因特网的 Web 服务器进行配置,以便将特定 Web 应用程序的请求转发至位于公司防火墙之后的应用程序服务器。
在 Sun ONE Application Server 中,Web 服务器插件允许在不同的服务器实例之间转发 HTTP (Web) 请求。
Web 服务器插件执行以下功能:
- 重新使用代理服务器连接(如果可能的话)。这样一来,不必打开新连接,便可处理传入的请求。
- Web 服务器插件在开始接收请求和响应时便以数据流形式对请求和响应进行处理。也就是说,此插件不会等到完全收集请求或响应后,才将其转发至远程服务器。
- Web 服务器插件与同一远程服务器保持多个出站 HTTP 连接(如果合适的话)。为 Web 服务器插件转发的请求建立的连接称作出站 HTTP 连接。
要了解 Web 服务器插件的工作原理,必须了解 HTTP 请求的基本原理,尤其是 Sun ONE Application Server 用来处理 HTTP 请求的方法。
处理客户机请求
Sun ONE Application Server 是可以直接接受并响应 HTTP 请求的应用程序服务器。本节将介绍 HTTP 的基本原理以及 Sun ONE Application Server 处理请求的方式。本节包括以下主题:
HTTP 基本原理
简而言之,HTTP/1.1 协议的工作原理如下:
- 客户机(通常为浏览器)打开服务器连接并发送请求。
- 服务器处理请求、生成响应并关闭连接(如果找到 Connection:Close 标题)。
请求由表示方法(例如 GET 或 POST)的行、表示所请求的资源的通用资源标识符 (URI) 以及 HTTP 协议版本组成,各部分以空格分隔。
请求后面通常包含一些标题、表示标题结尾的空白行,有时还会包含正文数据。标题可提供各种有关请求或客户机正文数据的信息。标题通常只针对 POST 和 PUT 方法发送。
以下显示的示例请求由浏览器发送,用于请求服务器 foo.com 返回 /index.html 中的资源。此示例使用了方法 GET,因此未发送任何正文数据(此请求用于获取而不是发送某些数据)。
GET /index.html HTTP/1.0
User-agent:Mozilla
Accept:text/html, text/plain, image/jpeg, image/gif, */*
Host:foo.com
此服务器接收请求并对其进行处理。尽管它可以同步处理多个请求,但仍单独处理每个请求。每个请求被分为一系列步骤,这些步骤合起来构成请求处理进程。
此服务器生成响应,其中包含 HTTP 协议版本、HTTP 状态代码和原因词组,三者之间以空格分隔。响应后面通常包含一些标题。标题结尾以空白行表示。之后是响应的正文数据。典型的 HTTP 响应可能如下所示:
HTTP/1.0 200 OK
Server:Standard/7.0
Content-type:text/html
Content-length: 83
<HTML>
<HEAD><TITLE>Hello World</Title></HEAD>
<BODY>Hello World</BODY>
</HTML>
状态代码和原因词组通知客户机服务器处理请求的方式。通常情况下,返回状态代码 200,表示已成功处理请求,且正文数据包含请求的项目。其它结果代码表示重定向到其它服务器或浏览器的高速缓存,或者返回各种类型的 HTTP 错误,例如,“未找到 404”。
请求处理进程的执行步骤
Sun ONE Application Server 在首次启动时将执行某些初始化任务,然后等待客户机(例如浏览器)发出的 HTTP 请求。它在接收到请求时,将首先选择虚拟服务器。
选择虚拟服务器后,该虚拟服务器的 obj.conf 文件将指定如何通过以下步骤处理请求:
- AuthTrans(授权转换)
验证请求中发送的任何授权信息(例如,名称和密码)。
- NameTrans(名称转换)
将逻辑 URI 转换为本地文件系统路径。
- PathCheck(路径检查)
检查本地文件系统路径是否有效,并检查请求者对此文件系统上的请求资源是否具有访问权限。
- ObjectType(对象键入)
确定请求资源的 MIME 类型(多用途 Internet 邮件编码),例如,text/html、image/gif 等。
- Service(生成响应)
生成响应并将其返回客户机。
- AddLog(添加日志条目)
向日志文件中添加条目。
- Error(服务)
只要前面的步骤中发生错误,就会执行此步骤。如果发生错误,服务器将记录错误信息并中止此进程。
Web 服务器插件配置
Web 服务器插件的配置和行为由一组配置文件确定。Sun ONE Application Server 在每次处理客户机请求时将查看这些文件中定义的配置。这些配置文件名为 obj.conf 和 init.conf。obj.conf 文件以虚拟服务器的名称作为前缀,例如 server1-obj.conf。有关详细信息,请参见“obj.conf 文件”。
Sun ONE Application Server 的每个实例都有各自的 init.conf 文件,服务器在启动时将引用此文件。
正如前面的主题所介绍的,obj.conf 配置文件包含一系列指令,用于通知 Sun ONE Application Server 在客户机请求和响应进程的每个阶段要执行的操作。每个指令都调用服务器应用程序函数 (SAF)。
obj.conf 文件对 Sun ONE Application Server 的运行至关重要。通过管理界面对服务器进行更改时,系统将自动更新 obj.conf。
init.conf 配置文件用于设置在初始化过程中配置服务器的变量的值。服务器将在启动过程中执行此文件中指定的配置参数。有关详细信息,请参见《Sun ONE Application Server Administrator's Configuration File Reference》。
下图显示 Web 浏览器、前端 Web 服务器、后端应用程序服务器以及 Web 服务器插件的 service-passthrough 和 auth-passthrough SAF 之间的关系:
   Web 浏览器、Web 服务器、应用程序服务器以及 Web 服务器插件 SAF 之间的关系
Web 服务器插件 SAF 参考
本节介绍以下服务器应用程序函数 (SAF) 的功能和行为:
init-passthrough
init-passthrough 函数用于初始化 Web 服务器插件。必须调用此函数,才能使用 Web 服务器插件。
示例:
Init fn="load-modules" shlib="c:/plugins/passthrough.dll" funcs="init-passthrough,auth-passthrough,check-passthrough,service-passthrough" NativeThread="no"
Init fn="init-passthrough"
auth-passthrough
auth-passthrough SAF 可在 AuthTrans-class 指令中使用。
auth-passthrough 函数检查传入的 HTTP (web) 请求中是否存在由中间服务器上运行的 service-passthrough 函数编码的客户机信息。客户机信息包括:
- 请求源自的 IP 地址
- 初始客户机使用的 SSL 密钥大小
- 初始客户机提供的 SSL 客户证书
当 auth-passthrough 检测到编码的客户机信息时,它将把请求作为初始客户机的直接请求,而不是作为由运行 service-passthrough 的中间服务器转发的请求处理。
这在两层部署方案中很有用;
- Sun ONE Application Server 实例由公司防火墙之后的第二个防火墙隐藏。
- 不允许与 S1AS 实例直接建立客户机连接。
在此类网络体系结构中,客户机始终与运行代理插件的前端 Web 服务器连接。此 Web 服务器用于将请求转发至 Sun ONE Application Server。这表示 Sun ONE Application Server 只能从代理主机(本例中为 Web 服务器)接收请求,而不能直接从客户机主机接收请求。这意味着,如果应用程序(部署在两个防火墙之后的 Sun ONE Application Server 实例中)查询客户机信息(例如,客户机的 IP 地址),则将获得代理主机 IP(因为它是中继请求的实际初始主机)。可以使用 auth-passthrough SAF 修改此行为,以显示远程(代理)客户机信息。
由于 auth-passthrough 可能会覆盖用于验证的信息(例如,请求源自的 IP 地址),因此必须只允许将信任的客户机或服务器连接至运行 auth-passthrough 的服务器。作为一种预防措施,建议您只使用公司防火墙之后的服务器来运行 auth-passthrough。可通过 Internet 访问的服务器不应运行 auth-passthrough SAF。只有在需要有关初始客户机的相关信息时,才能使用 auth-passthrough SAF。
请注意,在以上所述的方案中,SSL 客户机验证只能在 Web 服务器上打开,并且始终要在应用程序服务器上关闭,这样配置才能正常工作。
命令示例:
AuthTrans fn="auth-passthrough"
service-passthrough
service-passthrough SAF 可在 Service-class 指令中使用。
service-passthrough SAF 将请求从一个服务器转发至另一个服务器进行处理。可以将 service-passthrough SAF 配置为使用 SSL 连接或非 SSL(HTTPS 或 HTTP)连接与远程服务器建立连接,并且不受用于接收初始请求的连接类型的影响。service-passthrough SAF 用于对有关初始客户机的信息进行编码,此信息可以由远程服务器上运行的 auth-passthrough 函数进行解码。
service-passthrough 指令通常与 obj.conf 配置文件中的其它指令组合使用,如下所示:
<Object name="passthrough">
ObjectType fn="force-type" type="magnus-internal/passthrough"
Error reason="Bad Gateway" fn="send-error" uri="$docroot/badgateway.html"
</Object>
<Object name="default">
....
NameTrans fn="assign-name" from="(/webapp1|/webapp1/*)" name="passthrough"
...
</Object>
如果后端应用程序服务器已关闭,则将向用户显示本地 HTML 文件 badgateway.html。如果运行 service-passthrough SAF 的服务器需要提供它可以访问的文件,并只将被拒绝的请求转发到后端应用程序服务器,则 ObjectType 行将改为:
ObjectType fn="check-passthrough" type="magnus-internal/passthrough"
check-passthrough
check-passthrough SAF 可在 ObjectType-class 指令中使用。
check-passthrough 函数检查本地服务器中是否存在请求的资源(例如,HTML 文档或 GIF 图像)。如果不存在,check-passthrough SAF 将设置类型,指示应将请求传递到其它服务器以便由 service-passthrough SAF 进行处理。
参数:
type -(可选)请求资源不存在时设置的类型。默认类型为 "magnus-internal/passthrough"。
示例
ObjectType fn="check-passthrough"
使用 Web 服务器插件
要向 Sun ONE Web Server 或 Sun ONE Application Server 实例中添加插件,请执行以下步骤:
- 确保 libpassthrough.so (UNIX) 位于 install_dir/plugins/passthrough/bin 目录中,且 passthrough.dll 文件 (Windows) 位于 install_dir/bin 目录中。向 Sun ONE Web Server 6.0 中添加插件时,必须从 Sun ONE Application Server 7 安装中复制插件。
- 在 install_dir/config/init.conf(对于 Sun ONE Application Server 7)或 install_dir/config/magnus.conf(对于 Sun ONE Web Server 6.0)配置文件中添加以下行。每行均以 Init 开头,且所有内容均在一行上。
Windows:
Init fn="load-modules" shlib="c:/install_dir/bin/passthrough.dll" funcs="init-passthrough,auth-passthrough,check-passthrough, service-passthrough" NativeThread="no"
Init fn="init-passthrough"
UNIX:
Init fn="load-modules" shlib="install_dir/plugins/passthrough/bin/libpassthrough.so" funcs="init-passthrough,auth-passthrough,check-passthrough,service-passthrough" NativeThread="no"
Init fn="init-passthrough"
- 通过在 config/appserver-server-instance-obj.conf 配置文件的顶部添加以下行,将 passthrough <Object> 添加到 obj.conf 中。在 Sun ONE Application Server 上,必须在 config/<appserver-server-instance>-obj.conf 文件中执行此步骤。
<Object name="passthrough">
ObjectType fn="force-type" type="magnus-internal/passthrough"
Service type="magnus-internal/passthrough" fn="service-passthrough" servers="server"
Error reason="Bad Gateway" fn="send-error" uri="$docroot/badgateway.html"
</Object>其中,server 是以下格式的 URL:
http://servername:port
- 通过在 install_dir/config/obj.conf 配置文件中的默认对象的顶部添加以下行,来配置要转发的 URI:
NameTrans fn="assign-name" from="(/uri|/uri/*)" name="passthrough"
uri 是远程服务器上部署的 Web 应用程序的上下文根,passthrough 与 obj.conf 中的 <Object> 的名称(步骤 3 中给出)相对应。
例如:
<Object name="default">
...
NameTrans fn="assign-name" from="(/webapp1|/webapp1/*)" name="passthrough"
...
</Object>
- 重新启动此服务器。
注意 对于 Solaris 和 Linux,插件库的名称为 libpassthrough.so。对于 Windows,插件库的名称为 passthrough.dll。
配置 Microsoft IIS 以使用 Web 服务器插件
配置 Microsoft Internet Information 服务以使用 Web 服务器插件涉及到对 Web 服务器插件和 Microsoft IIS 进行配置,使两者可以相互使用。
此外,您还可以配置服务器池,以处理在不同服务器上运行的多个应用程序。
本节包括以下主题:
为 IIS 配置 Web 服务器插件
要为 IIS 配置 Web 服务器插件,请执行以下任务:
- 在 C:\ 命令行提示处键入以下命令,在 IIS wwwroot 目录下为 Web 服务器插件创建一个目录:
md \Inetpub\wwwroot\sun-passthrough
- 将插件文件复制到 C:\Inetpub\wwwroot\sun-passthrough 目录。
- 使用文本编辑器将安装了 Sun ONE Application Server 的计算机的 URL 添加到 C:\Inetpub\wwwroot\sun-passthrough\sun-passthrough.properties 文件中。
您需要通过文本编辑器添加以下信息:
server=http://appservername:port
其中,appservername 是安装了 Sun ONE Application Server 的计算机的主机名或 IP 地址,port 是 Sun ONE Application Server 侦听的端口号(此值通常设置为 80)。
- 在 C:\Inetpub\wwwroot\sun-passthrough\sun-passthrough.properties 文件中列出 Sun ONE Application Server 要处理的上下文根。
这些上下文根应该与 Sun ONE Application Server 中部署的应用程序的上下文根相对应。对这些上下文根的请求将由 Sun ONE Application Server 处理,而其它请求则由 IIS Web 服务器处理。用于将请求传递给 Web 应用程序的命令行如下:
passthrough=/webapplication
其中,/webapplication 是 Web 服务器的上下文根。要将所有请求传递给 Sun ONE Application Server,请添加以下行:
passthrough=/
至此,您已完成了对 Microsoft IIS 根目录下的 Web 服务器插件的配置。要完成整个过程,还需要配置 Microsoft IIS 以使用此 Web 服务器插件。
配置 IIS 以使用 Web 服务器插件
要配置 IIS 以使用 Web 服务器插件,需要打开 Windows Internet 服务管理器。Internet 服务管理器位于“控制面板”文件夹的“管理工具”文件夹中。
打开 Internet 服务管理器,并执行以下任务:
- 选择要启用此插件的 Web 站点。此 Web 站点通常命名为“默认的 Web 站点”。
- 在此 Web 站点上单击鼠标右键,并选择“属性”以打开“属性”记事本。
- 打开“ISAPI 过滤器”选项卡,单击“添加”按钮,然后执行以下步骤添加新的 ISAPI 过滤器:
在“过滤器名”字段中,输入 Sun ONE Application Server
在“可执行文件”字段中,键入 C:\Inetpub\wwwroot\sun-passthrough\sun-passthrough.dll
单击“确定”关闭“属性”记事本。
- 现在,您需要创建并配置一个新的虚拟目录。执行以下步骤,创建并配置一个新的虚拟目录:
在默认的 Web 站点上单击鼠标右键,选择“新建”,然后选择“虚拟目录”。将打开“虚拟目录创建向导”。
在“目录”字段中,键入 C:\Inetpub\wwwroot\sun-passthrough
确保选中“执行权限”复选框,并使所有其它权限复选框保持未选中状态。
单击“完成”。
- 您需要停止并启动 Web 服务器,才能使新的设置生效。要停止 Web 服务器,请在此 Web 站点上单击鼠标右键,然后选择“停止”。要启动 Web 服务器,请在此 Web 站点上单击鼠标右键,然后选择“启动”。
接下来,在 Web 浏览器中键入以下地址,以访问此 Web 应用程序的上下文根:
http://webservername/webapplication
其中,webservername 是 Web 服务器的主机名或 IP 地址,/webapplication 是在 C:\Inetpub\wwwroot\sun-passthrough\sun-passthrough.properties 文件中列出的上下文根,用于验证 Web 服务器、Web 服务器插件和 Sun ONE Application Server 是否正常运行。
配置多个服务器池
通过在 sun-passthrough.properties 文件中配置服务器池,可以将 Web 应用程序分布到多个应用程序服务器中(即,在一组服务器上运行一些应用程序,而在另一组服务器上运行其它应用程序)。为每个服务器池选择一个唯一的名称(由字母和数字组成)。按照“配置 Microsoft IIS 以使用 Web 服务器插件”一节中的介绍完成为 Microsoft IIS 安装和配置 Web 服务器插件的步骤后,应编辑 C:\Inetpub\wwwroot\sun-passthrough\sun-passthrough.properties 文件并在相关的服务器和 passthrough 属性行之前加上为服务器池选择的唯一名称作为前缀。在服务器池名称后加上句点 (.)。
例如,sun-passthrough.properties 文件中的以下行定义了两个服务器池。第一个服务器池包含 server-a 以及上下文根 /app1 的服务请求。第二个服务器池包含 server-b 以及 /app2 和 /app3 上下文根的服务请求。
server=http://server-a
passthrough=/app1
serverpool2.server=http://server-b
serverpool2.passthrough=/app2
serverpool2.passthrough=/app
样例 sun-passthrough.properties 文件
# Sun ONE Application Server web server plugin for IIS
#
# This file is used to configure the Sun ONE Application Server web server
# plugin for IIS.Lines beginning with a '#' are ignored.
# server
#
# The server property specifies the URL of an application server.If multiple
# server properties are given, the plugin will distribute load across the
# specified application servers.
#
server=http://localhost:8080
# passthrough
#
# The passthrough property specifies the context root (virtual directory) of a
# web application.Requests for the given context root will be passed to the
# application server for processing.If 'passthrough=/' is specified, all
# requests will be passed to the application server for processing.
#
# passthrough properties should be ordered from most to least specific.For
# example, 'passthrough=/apps/app1' should appear before 'passthrough=/apps'.
#
# Multiple passthrough properties are allowed.
#
#passthrough=/webapp
#passthrough=/servlets
#passthrough=*.jsp
passthrough=/
# prefix
#
# The prefix property specifies the IIS virtual directory that contains the
# plugin DLL, sun-passthrough.dll.
#
prefix=/sun-passthrough
# error-url
#
# The error-url property specifies the URL of a page to redirect the client to
# when the application server is unavailable.
#
#error-url=/badgateway.htm
# It is possible to configure multiple server pools by prefixing the server
# and passthrough property names with a pool name followed by a period ('.').
# Pool names can be any sequence of letters and numbers.
#
# For example, the following properties define two server pools.One server
# pool will service the web applications at '/app1' and the other will service
# the web applications at '/app2' and '/app3':
#
#serverpool1.server=http://server-a
#serverpool1.passthrough=/app1
#
#serverpool2.server=http://server-b
#serverpool2.passthrough=/app2
#serverpool2.passthrough=/app3
配置 Web 服务器插件以用于 Apache 服务器
本节介绍如何编译 Apache 源代码,以及如何配置 Apache Web 服务器的安装。
- 从 www.apache.org 中下载最新的 Apache 源代码分发
将源代码分发解压缩。源代码分发以压缩归档文件的形式提供。如果要安装 Apache 1.3.22,则源代码分发归档文件将为 apache_1.3.22.tar.gz。
- 使用以下命令解压缩归档文件:
$ tar -zxvf apache_1.3.26.tar.gz
此命令将在当前的工作目录中创建名为 apache_1.3.26 的目录。
- 现在,您需要对环境进行配置以便对 Apache 源代码进行编译。源代码分发附带了一个名为 configure 的脚本,此脚本用于检查环境中是否存在成功编译 Apache 所需的必要支持文件(例如,标题、共享库和公用程序)。
要配置环境,请转至 Apache 源目录并继续执行以下步骤:
确保在 Solaris 或 Linux 上安装 Apache 时存在以下路径:
CC=/usr/dist/share/devpro/5.x-sparc/bin/cc
PATH(您将在路径/usr/ccs/bin 中找到此命令)中应存在 ar。
Make file(您将在/usr/ccs/bin/make 路径中找到此命令)
运行以下命令:
$ ./configure –enable-module=proxy --prefix=/usr/local/apache
以上命令中指定的目录为一个变量。您可以指定安装 Apache 的路径。prefix 参数指示要将 Apache 安装到的位置。此命令将在屏幕上输出多个行。此命令实际上是根据系统配置为编译创建 Makefile。如果 configure 中存在错误,您可能会丢失在继续操作之前必须安装的一些标题文件或公用程序。
- configure 脚本成功运行后,您可以使用 make 命令对 Apache 进行编译,如下所示:
$ make
此命令将在屏幕上输出多个行,表示进程正在编译 Apache 源代码并正在链接 Apache。此进程通常不会出现错误。但如果出现错误,请检查是否正确下载了 Apache 的所有库文件和公用程序。
- 现在,您需要安装 Apache。Apache 将自动安装到 /usr/local/apache 目录(或指定的任何其它目录)中。要安装 Apache,请运行以下命令:
$ make install
如果此命令成功执行,则表明系统上已安装了 Apache。您应该在以下目录中看到 Apache 的安装文件:
/usr/local/apache
主配置文件 httpd.conf 将安装到 /usr/local/apache/ 目录中。
- 通过运行以下命令来配置 Apache:
$ Configure Apache
Apache 通过文件 httpd.conf 进行配置。此文件包含一些 Apache 指令,用于确定 Apache 服务器的各种操作参数。对于 Apache 的简单安装,需要修改以下几个指令:
现在,便可以对 Apache 进行配置,以执行默认的行为和 Web 服务。如果需要设置其它参数,请参考配置文件。
- Apache 附带了名为 apachectl 的脚本,此脚本可简化 Apache 的启动、停止和重新启动。运行以下命令启动 Apache
$ /usr/local/apache/bin/apachectl start
要停止 Apache,请运行以下命令:
use /usr/local/apache/bin/apachectl stop
启动后便可以测试 Apache 的安装。运行 Apache 后,请在 Web 浏览器中键入以下地址:http://localhost/。如果安装成功且 Apache 正在运行,则应该看到一个显示此信息的测试页。