系统管理指南:网络服务

第 2 章 管理 Web 高速缓存服务器

本章概述了 Solaris 网络高速缓存和加速器 (Network Cache and Accelerator, NCA),介绍了 NCA 的使用过程和有关 NCA 的参考资料。此外,还针对 Solaris 10 6/06 发行版介绍了安全套接字层 (Secure Sockets Layer, SSL) 的使用以及使用 SSL 内核代理来改进 SSL 包处理性能的过程。

网络高速缓存和加速器(概述)

Solaris 网络高速缓存和加速器 (Network Cache and Accelerator, NCA) 可通过保留 HTTP 请求期间所访问的 Web 页的内核内部高速缓存来改善 Web 服务器性能。此内核内部高速缓存使用系统内存来显著改善通常由 Web 服务器处理的 HTTP 请求的性能。使用系统内存来保存用于 HTTP 请求的 Web 页会降低内核与 Web 服务器之间的开销,从而可以改善 Web 服务器的性能。NCA 提供一个套接字接口,通过该接口,只需进行最少的修改,任何 Web 服务器都可与 NCA 通信。

从内核内部高速缓存恢复请求页(高速缓存命中)时,性能会得到显著改善。请求页不在高速缓存中(高速缓存未命中)并且必须从 Web 服务器恢复时,性能也会得到显著改善。

此产品设计用于在专用的 Web 服务器上运行。如果在运行 NCA 的服务器上运行其他大型进程,将会出现问题。

NCA 将记录所有高速缓存命中,因此 NCA 提供日志记录支持。此日志以二进制格式存储,以改善性能。ncab2clf 命令可用来将日志由二进制格式转换为一般日志格式 (common log format, CLF)。

Solaris 发行版包括以下增强功能:

使用安全套接字层协议的 Web 服务器

在 Solaris 10 6/06 发行版中,可将 Apache 2.0 和 Sun Java System Web Server 配置为使用安全套接字层 (Secure Sockets Layer, SSL) 协议。该协议可在两个应用程序之间提供保密性、消息完整性和端点身份验证。为了加速 SSL 流量,已对 Solaris 内核进行更改。

管理 Web 高速缓存服务器(任务列表)

下表介绍了使用 NCA 或 SSL 所需的过程。

任务 

说明 

参考 

规划 NCA 

要在启用 NCA 之前解决的问题的列表。 

规划 NCA

启用 NCA 

启用 Web 服务器中 Web 页的内核内部高速缓存的步骤。 

如何启用 Web 页的高速缓存

禁用 NCA 

禁用 Web 服务器中 Web 页的内核内部高速缓存的步骤。 

如何禁用 Web 页的高速缓存

管理 NCA 日志记录 

启用或禁用 NCA 日志记录进程的步骤。 

如何启用或禁用 NCA 日志记录

装入 NCA 套接字库 

在 AF_NCA 套接字不受支持的情况下使用 NCA 的步骤。 

如何装入 Socket Utility Library for NCA

将 SSL 内核代理用于 Apache 2.0 Web 服务器 

将 SSL 内核代理用于 Web 服务器以改善 SSL 包处理的步骤。 

如何配置 Apache 2.0 Web 服务器以使用 SSL 内核代理

将 SSL 内核代理用于 Sun Java System Web Server 

将 SSL 内核代理用于 Web 服务器以改善 SSL 包处理的步骤。 

如何配置 Sun Java System Web Server 以使用 SSL 内核代理

将 SSL 内核代理用于本地区域中的 Web 服务器 

将 SSL 内核代理用于本地区域中的 Web 服务器的步骤。 

在区域中使用 SSL 内核代理

规划 NCA

以下各节介绍了在启动 NCA 服务之前需要解决的问题。

NCA 的系统要求

要支持 NCA,系统必须满足以下要求:

此产品设计用于在专用的 Web 服务器上运行。如果在运行 NCA 的服务器上运行其他大型进程,将会出现问题。

NCA 日志记录

可将 NCA 服务配置为记录 Web 活动。通常,如果已启用 Web 服务器日志记录,则应启用 NCA 日志记录。

可为门服务器提供守护程序支持的插入库

许多 Web 服务器都使用 AF_INET 套接字。缺省情况下,NCA 使用 AF_NCA 套接字。为更正此情况,提供一个插入库。这一新库在标准套接字库 libsocket.so 之前装入。库调用 bind() 由新库 ncad_addr.so 插入。假设已在 /etc/nca/ncakmod.conf 中启用状态。Solaris 9 和 Solaris 10 发行版所包含的 Apache 的版本已设置为调用此库。如果您使用的是 IWS 或 Netscape 服务器,请参见如何装入 Socket Utility Library for NCA以使用新库。

多个实例支持

安装了 NCA 的系统通常需要运行多个 Web 服务器实例。例如,一个服务器可能需要既支持用于外部访问的 Web 服务器,又支持 Web 管理服务器。要分隔这些服务器,需要将每个服务器配置为使用单独的端口。

管理 Web 页的高速缓存(任务)

以下各节介绍了启用或禁用服务的各个部分的过程。

Procedure如何启用 Web 页的高速缓存

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 注册接口。

    /etc/nca/nca.if 文件中键入每个物理接口的名称。有关更多信息,请参见 nca.if(4) 手册页。


    # cat /etc/nca/nca.if
    
    hme0
    
    hme1

    每个接口都必须有一个附带的 hostname.interface-name 文件,并在 /etc/hosts 文件中具有一个表示 hostname.interface-name 内容的项。要在所有接口中都启动 NCA 功能,请在 nca.if 文件中放置一个星号 *

  3. 启用 ncakmod 内核模块。

    /etc/nca/ncakmod.conf 中的 status 项更改为 enabled


    # cat /etc/nca/ncakmod.conf
    
    #
    
    # NCA Kernel Module Configuration File
    
    #
    
    status=enabled
    
    httpd_door_path=/var/run/nca_httpd_1.door
    
    nca_active=disabled

    有关更多信息,请参见 ncakmod.conf(4) 手册页。

  4. (可选的)启用 NCA 日志记录。

    /etc/nca/ncalogd.conf 中的 status 项更改为 enabled


    # cat /etc/nca/ncalogd.conf
    
    #
    
    # NCA Logging Configuration File
    
    #
    
    status=enabled
    
    logd_path_name="/var/nca/log"
    
    logd_file_size=1000000

    可通过更改 logd_path_name 项表示的路径来更改日志文件的位置。日志文件可以是原始设备或文件。有关 NCA 日志文件路径的样例,请参见以下示例。有关配置文件的更多信息,请参见 ncalogd.conf(4) 手册页。

  5. (可选的)为多个实例支持定义端口。

    /etc/nca/ncaport.conf 文件中添加端口号。此项将使 NCA 在所有已配置的 IP 地址中监视端口 80。


    # cat /etc/nca/ncaport.conf
    
    #
    
    # NCA Kernel Module Port Configuration File
    
    #
    
      .
    
      .
    
    ncaport=*/80
    
  6. 仅适用于 x86:增加虚拟内存大小。

    使用 eeprom 命令设置系统的 kernelbase


    # eeprom kernelbase=0x90000000
    
    # eeprom kernelbase
    
    kernelbase=0x90000000

    第二个命令用于验证已设置的参数。


    注 –

    通过设置 kernelbase,可将用户进程可以使用的虚拟内存量减小至 3 GB 以下。此限制意味着系统与 ABI 不兼容。引导系统时,控制台会显示一条警告消息,指明不兼容。大多数程序实际需要的虚拟地址空间都不到 3 GB。如果某一程序需要 3 GB 以上的虚拟地址空间,则需在未启用 NCA 的系统中运行该程序。


  7. 重新引导服务器。


示例 2–1 使用原始设备作为 NCA 日志文件

ncalogd.conf 中的 logd_path_name 字符串可将原始设备定义为存储 NCA 日志文件的位置。使用原始设备的优点在于,访问原始设备的开销很小,因此服务可以运行得更快。

NCA 服务将测试文件中列出的所有原始设备,以确保没有使用任何文件系统。此测试可确保不会意外重写任何活动的文件系统。

为了防止此测试找到文件系统,请运行以下命令。此命令将销毁任何磁盘分区中已配置为文件系统的文件系统部分。在此示例中,/dev/rdsk/c0t0d0s7 是正在使用旧文件系统的原始设备。


# dd if=/dev/zero of=/dev/rdsk/c0t0d0s7 bs=1024 count=1

运行 dd 之后,便可将该原始设备添加到 ncalogd.conf 文件中。


# cat /etc/nca/ncalogd.conf

#

# NCA Logging Configuration File

#

status=enabled

logd_path_name="/dev/rdsk/c0t0d0s7"

logd_file_size=1000000


示例 2–2 将多个文件用于 NCA 日志记录

ncalogd.conf 中的 logd_path_name 字符串可将多个目标定义为存储 NCA 日志文件的位置。当第一个文件已满时,将使用第二个文件。以下示例显示如何选择先写入 /var/nca/log 文件然后再使用原始分区。


# cat /etc/nca/ncalogd.conf

#

# NCA Logging Configuration File

#

status=enabled

logd_path_name="/var/nca/log /dev/rdsk/c0t0d0s7"

logd_file_size=1000000

Procedure如何禁用 Web 页的高速缓存

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 禁用 ncakmod 内核模块。

    /etc/nca/ncakmod.conf 中的 status 项更改为 disabled


    # cat /etc/nca/ncakmod.conf
    
    # NCA Kernel Module Configuration File
    
    #
    
    status=disabled
    
    httpd_door_path=/var/run/nca_httpd_1.door
    
    nca_active=disabled

    有关更多信息,请参见 ncakmod.conf(4) 手册页。

  3. 禁用 NCA 日志记录。

    /etc/nca/ncalogd.conf 中的 status 项更改为 disabled


    # cat /etc/nca/ncalogd.conf
    
    #
    
    # NCA Logging Configuration File
    
    #
    
    status=disabled
    
    logd_path_name="/var/nca/log"
    
    logd_file_size=1000000

    有关更多信息,请参见 ncalogd.conf(4) 手册页。

  4. 重新引导服务器。

Procedure如何启用或禁用 NCA 日志记录

在启用 NCA 之后,可根据需要打开或关闭 NCA 日志记录。有关更多信息,请参见如何启用 Web 页的高速缓存

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 更改 NCA 日志记录。

    要永久性地禁用日志记录,需要将 /etc/nca/ncalogd.conf 中的状态更改为 disabled 并重新引导系统。有关更多信息,请参见 ncalogd.conf(4) 手册页。

    1. 停止日志记录。


      # /etc/init.d/ncalogd stop
      
    2. 启动日志记录。


      # /etc/init.d/ncalogd start
      

如何装入 Socket Utility Library for NCA

仅当您的 Web 服务器不提供对 AF_NCA 套接字的本机支持时,才应遵循此过程。

在 Web 服务器的启动脚本中,添加一个用于预装库的行。该行应与以下行类似:


LD_PRELOAD=/usr/lib/ncad_addr.so /usr/bin/httpd

Procedure如何向 NCA 服务中添加新端口

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 添加一个新端口。

    /etc/nca/ncaport.conf 中添加一个新端口。此示例在 IP 地址 192.168.84.71 中添加端口 8888。有关更多信息,请参见 ncaport.conf(4)


    # cat /etc/nca/ncaport.conf
    
    #
    
    # NCA Kernel Module Port Configuration File
    
    #
    
      .
    
      .
    
    ncaport=*/80
    
    ncaport=192.168.84.71/8888
    
  3. 启动一个新的 Web 实例。

    地址需要位于包含 NCA 端口配置的文件中,Web 服务器才能将该地址用于 NCA。如果 Web 服务器正在运行,则定义新地址后必须将其重新启动。

Procedure如何配置 Apache 2.0 Web 服务器以使用 SSL 内核代理

应使用此过程来改善 Apache 2.0 Web 服务器上的 SSL 包进程的性能。

开始之前

以下过程要求已安装并配置 Apache 2.0 Web 服务器。Solaris 10 发行版中包括 Apache 2.0 Web 服务器。

要使用 SSL 内核代理,服务器私钥和服务器证书需要位于一个文件中。如果只在 ssl.conf 文件中指定了 SSLCertificateFile 参数,则指定的文件可直接用于内核 SSL。如果还指定了 SSLCertificateKeyFile 参数,则需要合并证书文件和私钥文件。合并证书文件和私钥文件的一种方法是运行以下命令:


# cat cert.pem key.pem >cert_and key.pem
  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。�C有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”ksslcfg 命令包括在 Network Security 配置文件中。

  2. 停止 Web 服务器。

    此命令将停止将服务器配置为使用 SMF 运行的系统中的 Web 服务器。


    # svcadm disable svc:/network/http:apache2
    

    如果服务尚未转换,请使用以下命令语法停止该服务: /usr/apache2/bin/apachectl stop

  3. 确定要用于 ksslcfg 命令的参数。

    ksslcfg(1M) 手册页中列出了所有选项。必须了解的参数包括:

    • key_format-与 -f 选项一起定义证书和密钥格式。对于 SSL 内核代理,该值应为 pempkcs12

    • key_and_certificate_file-与 -i 选项一起设置存储服务器密钥和证书的文件位置。

    • password_file-与 -p 选项一起选择文件的位置,该文件中应包括用于加密私钥的口令。此口令用来允许无人参与的重新引导。对该文件的权限应为 0400

    • proxy_port-与 -x 选项一起设置 SSL 代理端口。请选择标准端口 80 之外的其他端口。

    • ssl_port-选择服务器应用程序的端口。通常,将此参数设置为 443


    注 –

    不能为 NCA 配置 ssl_portproxy_port 值,因为 SSL 内核代理以独占方式使用这些端口。通常,端口 80 用于 NCA,端口 8080 用于 proxy_port,端口 443 用于 ssl_port


  4. 创建服务实例。

    使用 ksslcfg 命令指定 SSL 代理端口和相关参数。


    ksslcfg create -f key_format -i key_and_certificate_file -p password_file -x proxy_port ssl_port
    
  5. 验证是否已正确创建该实例。

    以下命令报告的服务状态应为“online”。


    # svcs svc:/network/ssl/proxy
    
  6. 配置 Web 服务器以在 SSL 代理端口上侦听。

    编辑 /etc/apache2/http.conf 文件并添加一行,以定义 SSL 代理端口。如果使用服务器 IP 地址,Web 服务器将只在该接口上侦听。该行应如下所示:


    Listen 0.0.0.0:proxy_port
    
  7. 为 Web 服务器设置 SMF 相关性。

    Web 服务器只应在 SSL 内核代理实例之后启动。以下命令将建立该相关性。


    # svccfg -s svc:/network/http:apache2
    
    svc:/network/http:apache2> addpg kssl dependency
    
    svc:/network/http:apache2> setprop kssl/entities = fmri:svc:/network/ssl/proxy:kssl-INADDR_ANY-443
    
    svc:/network/http:apache2> setprop kssl/grouping = astring: require_all
    
    svc:/network/http:apache2> setprop kssl/restart_on = astring: refresh
    
    svc:/network/http:apache2> setprop kssl/type = astring: service
    
    svc:/network/http:apache2> end
    
  8. 启用 Web 服务器。


    # svcadm enable svc:/network/http:apache2
    

    如果未使用 SMF 启动该服务,请使用以下命令: /usr/apache2/bin/apachectl startssl


示例 2–3 配置 Apache 2.0 Web 服务器以使用 SSL 内核代理

以下命令将使用 pem 密钥格式创建一个实例。


# ksslcfg create -f pem -i cert_and_key.pem -p file -x 8080 433

Procedure如何配置 Sun Java System Web Server 以使用 SSL 内核代理

应使用此过程来改善 Sun Java System Web Server 上的 SSL 包进程的性能。有关此 Web 服务器的信息,请参见《Sun Java System Web Server 6.1 SP4 Administrator’s Guide》

开始之前

以下过程要求已安装并配置 Sun Java System Web Server。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。�C有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”ksslcfg 命令包括在 Network Security 配置文件中。

  2. 停止 Web 服务器。

    使用管理员 Web 界面停止服务器。有关更多信息,请参见《Sun Java System Web Server 6.1 SP4 Administrator’s Guide》

  3. 确定要用于 ksslcfg 命令的参数。

    ksslcfg(1M) 手册页中列出了所有选项。必须了解的参数包括:

    • key_format-与 -f 选项一起定义证书和密钥格式。

    • token_label-与 -T 选项一起指定 PKCS#11 标记。

    • certificate_label-与 -C 选项一起选择 PKCS#11 标记的证书对象中的标签。

    • password_file-与 -p 选项一起选择文件的位置,该文件中应包括用于使用户登录到 Web 服务器所使用的 PKCS#11 标记的口令。此口令用来允许无人参与的重新引导。对该文件的权限应为 0400

    • proxy_port-与 -x 选项一起设置 SSL 代理端口。请选择标准端口 80 之外的其他端口。

    • ssl_port-定义服务器应用程序的端口。此值在 server.xml 文件中设置。通常,将此值设置为 443


    注 –

    不能为 NCA 配置 ssl_portproxy_port 值,因为 SSL 内核代理以独占方式使用这些端口。通常,端口 80 用于 NCA,端口 8080 用于 proxy_port,端口 443 用于 ssl_port


  4. 创建服务实例。

    使用 ksslcfg 命令指定 SSL 代理端口和相关参数。


    ksslcfg create -f key_format -T PKCS#11_token -C certificate_label -p password_file -x proxy_port ssl_port
    
  5. 验证是否已正确创建该实例。

    以下命令报告的服务状态应为“online”。


    # svcs svc:/network/ssl/proxy
    
  6. 配置 Web 服务器以在 SSL 代理端口上侦听。

    有关更多信息,请参见《Sun Java System Web Server 6.1 SP4 Administrator’s Guide》

  7. 启动 Web 服务器。


示例 2–4 配置 Sun Java System Web Server 以使用 SSL 内核代理

以下命令将使用 pkcs11 密钥格式创建一个实例。


# ksslcfg create -f pkcs11 -T "NSS Internal PKCS #11 Module" -C "Server-Cert" -p file -x 8080  443

在区域中使用 SSL 内核代理

SSL 内核代理在区域中工作时具有以下限制:


示例 2–5 在本地区域中配置 Apache Web 服务器以使用 SSL 内核代理

在本地区域中,先停止 Web 服务器。在全局区域中,执行配置服务的所有步骤。要为名为 apache_zone 的本地区域创建实例,请使用以下命令:


# ksslcfg create -f pem -i /zone/apache_zone/root/keypair.pem -p /zone/apache_zone/root/pass \

    -x 8080 apache_zone 443

在本地区域中,运行以下命令,以启用服务实例:


# svcadm enable svc:/network/http:apache2

高速缓存 Web 页(参考)

以下各节介绍了使用 NCA 所需的文件和组件。而且,还提供了有关 NCA 如何与 Web 服务器交互的特定信息。

NCA 文件

为了支持 NCA 功能,您需要多个文件。其中许多文件是 ASCII 格式的,但也有一些文件是二进制格式的。下表列出了需要的所有文件。

表 2–1 NCA 文件

文件名 

功能 

/dev/nca

NCA 设备的路径名。 

/etc/hostname.*

可列出服务器中配置的所有物理接口的文件。 

/etc/hosts

可列出与服务器关联的所有主机名的文件。此文件中的项必须与 /etc/hostname.* 文件中的项匹配,NCA 才能起作用。

/etc/init.d/ncakmod

用于启动 NCA 服务器的脚本。此脚本在引导服务器时运行。 

/etc/init.d/ncalogd

用于启动 NCA 日志记录的脚本。此脚本在引导服务器时运行。 

/etc/nca/nca.if

可列出 NCA 运行所在接口的文件。有关更多信息,请参见 nca.if(4) 手册页。

/etc/nca/ncakmod.conf

可列出用于 NCA 的配置参数的文件。有关更多信息,请参见 ncakmod.conf(4) 手册页。

/etc/nca/ncalogd.conf

可列出用于 NCA 日志记录的配置参数的文件。有关更多信息,请参见 ncalogd.conf(4) 手册页。

/etc/nca/ncaport.conf

可列出用于 NCA 的 IP 地址和端口的文件。有关更多信息,请参见 ncaport.conf(4) 手册页。

/usr/bin/ncab2clf

用于将日志文件中的数据转换为一般日志格式的命令。有关更多信息,请参见 ncab2clf(1) 手册页。

/usr/lib/net/ncaconfd

用于配置 NCA 以在引导期间在多个接口上运行的命令。有关更多信息,请参见 ncaconfd(1M) 手册页。

/usr/lib/nca_addr.so

使用 AF_NCA 套接字而非 AF_INET 套接字的库。此库必须用在使用 AF_INET 套接字的 Web 服务器上。有关更多信息,请参见 ncad_addr(4) 手册页。

/var/nca/log

保存日志文件数据的文件。该文件为二进制格式,因此不要对其进行编辑。 

/var/run/nca_httpd_1.door

门路径名。 

NCA 体系结构

NCA 功能包括以下组件。

内核模块 ncakmod 可在系统内存中维护 Web 页的高速缓存。该模块通过套接字接口与 Web 服务器 httpd 通信。系列类型为 PF_NCA。

该内核模块还提供一种可记录所有 HTTP 高速缓存命中的日志记录功能。NCA 日志记录将 HTTP 数据以二进制格式写入磁盘。NCA 提供一种转换实用程序,以将二进制日志文件转换为一般日志格式 (common log format, CLF)。

下图显示了常规路径以及启用 NCA 时所用路径的数据流。

图 2–1 NCA 服务的数据流

流程图显示了从客户机请求通过内核中的 NCA 层的数据流。

NCA 到 Httpd 的请求流

以下列表显示在客户机与 Web 服务器之间的请求流。

  1. 从客户机向 Web 服务器发出 HTTP 请求。

  2. 如果页面在高速缓存中,则返回内核内部的高速缓存 Web 页。

  3. 如果页面不在高速缓存中,则请求转到 Web 服务器,以恢复或更新页面。

  4. 根据响应中所用的 HTTP 协议语义,决定是否对页面进行高速缓存。然后将该页面返回客户机。如果 HTTP 请求中包含 Pragma: No-cache 头,页面将不会被高速缓存。