随笔 - 0  文章 - 3  trackbacks - 0
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿

文章分类(6)

文章档案(6)

Commerce开发

搜索

  •  

最新评论

作者:
Shash Anand (sanand@ca.ibm.com), 支持分析师, IBM
Scott Guminy (guminy@ca.ibm.com), 部署架构师 , IBM

引言

反向代理服务器在 WebSphere Commerce 服务器和 Internet 之间增加了额外一层保护。本文详细介绍如何将 IBM HTTP Server 配置为 WebSphere Commerce 的反向代理服务器,并提供一个示例配置文件。本文还描述了 WebSphere Application Server 如何将 HTTP 请求映射到应用服务器。这对反向代理服务器配置进行故障诊断十分有用。

反向代理概述

反向代理服务器是一种特殊的 HTTP 服务器,它可以防止直接访问内容 HTTP 服务器。对内容 HTTP 服务器的所有请求都转到反向代理服务器。图 1 阐释了这一过程。


图 1. 使用反向代理服务器的通信
使用反向代理服务器的通信 

如图 1 所示,浏览器向它认为的内容 HTTP 服务器发出 HTTP 请求,但实际上请求将发往反向代理服务器。反向代理服务器将请求转发到内容 HTTP 服务器。内容 HTTP 服务器将响应发送回反向代理服务器,然后反向代理服务器将响应发送到浏览器。您可以将防火墙放在适当的位置以增强安全性。最终,浏览器并不知道请求被重新路由到备选服务器上。它认为正在直接访问内容 HTTP 服务器。

转发代理和反向代理的区别

通常在网络内部用户试图访问外部站点的情况下使用转发代理。内部用户必须将客户端浏览器配置为使用代理访问外部站点。

而对于客户端,使用反向代理服务器通常看起来像使用真正的 Web 服务器。反向代理服务器接受所有请求,并将请求发送到内容 HTTP 服务器。当该代理服务器接收到响应时,它将结果发送回客户端,如同它是初始服务器一样。通常在想让客户端访问防火墙后面的服务器的情况下使用反向代理。

使用反向代理服务器的优点

使用反向代理服务器的两个主要优点体现在系统安全性和性能上:

  • 安全性:反向代理服务器提供了额外一层安全性,可以更进一步地保护通信链上的 HTTP 服务器。如果您在反向代理服务器和内容 HTTP 服务器之间使用防火墙,则可以将防火墙配置为只允许来自反向代理服务器的 HTTP 请求。
  • 性能:反向代理服务器可以通过几种方式增强 WebSphere Commerce 服务器的性能。
    • 加密/SSL 加速:您可以给反向代理服务器配备 SSL 加速硬件,这可以提高 SSL 请求的性能。
    • 缓存:反向代理服务器可以缓存静态内容以提供更好的性能。
    • 负载均衡:反向代理服务器可以均衡若干内容 HTTP 服务器之间的工作负载。例如,您可以拆分两个内容 HTTP 服务器之间的静态内容。

WebSphere Commerce HTTP Server 的标准配置

您可以使用 WebSphere Commerce Configuration Manager 来创建 WebSphere Commerce 实例和配置对应用程序的 HTTP 访问。这一配置是在 HTTP Server 和 WebSphere Application Server 中完成的。每个 Web 应用程序存档 (WAR) 都有自己的配置,如下所示。<long host> 是完全限定的主机名,例如,commerce.mydomain.com。<short host> 是主机名的第一部分,例如 commerce。

Stores.war:

URI:  /webapp/wcs/stores/*
            WebSphere Application Server Virtual host
            Name:  VH_<instance>
            Host Alias:  <long host>:80
            Host Alias:  <short host>:80
            Host Alias:  <long host>:443 used for HTTPS access
            Host Alias:  <short host>:443
            IBM HTTP Server (httpd.conf)
            VirtualHost:  <long host>:80
            Alias /wcsstore
            Alias /wcs
            VirtualHost: <long host>:443
            Alias /wcsstore
            Alias /wcs
            SSLEnabled
            

CommerceAccelerator.war:

URI:  /webapp/wcs/tools/*
            WebSphere Application Server Virtual host
            Name:  VH_<instance>_Tools
            Host Alias:  <long host>:8000 used for HTTPS access
            Host Alias:  <short host>:8000 used for HTTPS access
            IBM HTTP Server (httpd.conf)
            VirtualHost: <long host>:8000
            Alias   /adminconsole
            Alias	/wcsstore
            Alias	/accelerator
            Alias	/wcs
            Alias	/wcadmin
            Alias	/wcorgadmin
            Alias	/orgadminconsole
            SSLEnabled
            

SiteAdministration.war:

URI:  /webapp/wcs/orgadmin/*
            WebSphere Application Server Virtual host
            Name:  VH_<instance>_Admin
            Host Alias:  <long host>:8002 used for HTTPS access
            Host Alias:  <short host>:8002 used for HTTPS access
            IBM HTTP Server (httpd.conf)
            VirtualHost: <long host>:8002
            Alias	/adminconsole
            Alias	/wcsstore
            Alias	/accelerator
            Alias	/wcs
            Alias	/wcadmin
            Alias	/wcorgadmin
            Alias	/orgadminconsole
            SSLEnabled
            

OrganizationAdministration.war:

URI:  /webapp/wcs/orgadmin/*
            WebSphere Application Server Virtual host
            Name:  VH_<instance>_OrgAdmin
            Host Alias:  <long host>:8004 used for HTTPS access
            Host Alias:  <short host>:8004 used for HTTPS access
            IBM HTTP Server (httpd.conf)
            VirtualHost: <long host>:8004
            Alias	/adminconsole
            Alias	/wcsstore
            Alias	/accelerator
            Alias	/wcs
            Alias	/wcadmin
            Alias	/wcorgadmin
            Alias	/orgadminconsole
            SSLEnabled

通过 Web 服务器插件处理 HTTP 请求

安装在 IBM HTTP Server 中的 Web 服务器插件用于将请求路由到特定的应用服务器上。WebSphere Application Server 生成了一个配置文件 plugin-cfg.xml,IBM HTTP Server 插件使用该配置文件来确定如何将请求路由到 WebSphere Application Server。plugin-cfg.xml 文件包含从虚拟主机和 URI 到运行由虚拟主机和 URI 标识的应用程序的应用服务器主机名和端口号的映射。

下面是插件如何确定将请求发送到哪个应用服务器的示例:

  1. Web 浏览器对 http://www.mycompany.com/webapp/wcs/stores/MyStore/index.jsp 发出 HTTP 请求。
  2. IBM HTTP Server 接收到该请求,并将它转交给 WebSphere Application Server 插件。
  3. 该插件通过执行以下步骤来确定是否应该处理该请求:
    1. 将 URL 拆分成两个部分:Host (www.mycompany.com:80) 和 URI (/webapp/wcs/stores/MyStore/index.jsp)。
    2. 该插件发现 plugin-cfg.xml 文件中定义的虚拟主机与请求最佳匹配。因为虚拟主机可以在其中包含通配符,所以完全匹配者优先。例如,对于两个具有以下配置的虚拟主机:
      • default_host - Host Alias: *:80
      • WC_demo - Host Alias: www.mycompany.com:80

      在这种情况下,WC_demo 优先,因为它与 HTTP 请求的主机名完全匹配。

    3. 一旦虚拟主机确定了,该插件就会查找映射到该虚拟主机的所有 URI。URI 到虚拟主机映射是在安装 EAR 文件时配置到 WebSphere Application Server 中的。在本例中,WebSphere Commerce Stores.war 应用程序的 URI 与传入的请求 (/webapp/wcs/stores/*) 相匹配。
    4. 如果发现 URI 匹配,该插件将确定哪个服务器或服务器集群配置为运行由此虚拟主机和 URI 组合标识的应用程序。此映射是在应用程序安装时设置的。将发生以下事件:
      1. 该插件将 HTTP 请求发送到 WebSphere Application Server 以处理该请求。
      2. 将响应发送回浏览器。
      3. 如果没有找到服务器,则 IBM HTTP Server 将使用其 httpd.conf 配置文件来处理请求。

将 IBM HTTP Server 配置为 WebSphere Commerce 的反向代理服务器

在配置 HTTP Server 之前,请完成以下任务:

  1. 安装 WebSphere Commerce。
  2. 创建一个 WebSphere Commerce 实例。
  3. 在 WebSphere Commerce 实例上发布一个存储。
  4. 确保您可以通过由 WebSphere Commerce 配置的 Web 服务器来访问该 WebSphere Commerce 实例。

期望的拓扑

图 2 显示了您在本示例中将配置的拓扑。


图 2. 具有一个反向代理服务器的示例 WebSphere Commerce 拓扑
具有一个反向代理服务器的示例 WebSphere Commerce 拓扑 

您将引入一个反向代理服务器来保护安装在应用层的 Web 服务器。然后配置该反向代理服务器,以将 HTTP 请求转发到由 WebSphere Commerce 配置的应用层上的 Web 服务器。WebSphere Commerce 使用了以下端口:80、443、8000、8002 和 8004。代理服务器必须公开的最小端口集是 80 和 443。Stores Web Module 使用这些端口并获得对已发布的存储的外部访问权。如果您使用的是 Business to Business 存储模型,则可能也想要公开其他 Web 模块使用的端口。在本例中,将在反向代理服务器上公开所有的 WebSphere Commerce 端口。

对于此配置任务,假设内容 Web 服务器是 content.mycompany.com。如果没有代理服务器,您可以通过以下两个地址访问 WebSphere Commerce 服务器:

  • http://content.mycompany.com/webapp/wcs/stores/MyStore/index.jsp 或
  • https://content.mycompany.com:8000/accelerator

我们将引入反向代理服务器来处理来自 Internet 的请求。该系统响应 commerce.mycompany.com 主机名。因此,需要通过以下 URL 访问站点:

  • http://commerce.mycompany.com/webapp/wcs/stores/MyStore/index.jsp 或
  • https://commerce.mycompany.com:8000/accelerator

在反向代理机器上安装 IBM HTTP Server

在本示例中使用的反向代理服务器软件是 IBM HTTP Server 2.0.47.1。请注意,在使用代理功能时,此版本的 IBM HTTP Server 有一个重要的修复是必需的。以前的版本可能无法工作。

请按照安装说明来安装 IBM HTTP Server。以下示例假设您已经将 IBM HTTP Server 安装到 c:\IHS2.0.47.1 目录中。

配置 IBM HTTP Server 2.0.47.1

  1. 在文本编辑器中打开以下文件:c:\IHS2.0.47.1\conf\httpd.conf
  2. 通过删除以下行中的 # 字符(取消注释)来启用 Proxy Modules:
    #LoadModule proxy_module modules/mod_proxy.so
                    #LoadModule proxy_http_module modules/mod_proxy_http.so
                    

  3. 为每个端口添加一个 Listen 指令,以使该反向代理服务器在端口 80、443、8000、8002 和 8004 上进行侦听,如下所示:
    Listen 0.0.0.0:80
                    Listen 0.0.0.0:443
                    Listen 0.0.0.0:8000
                    Listen 0.0.0.0:8002
                    Listen 0.0.0.0:8004
                    

  4. 通过取消注释以下行来启用 SSL Module:
    #LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
                    

  5. 虚拟主机指令 (<Virtual Host>) 用于为特定虚拟主机配置具体的属性。每个虚拟主机引用服务器上不同的 IP 地址、不同的端口号或不同的主机名。要添加虚拟主机,请完成以下步骤:
    1. 在每个虚拟主机中,必须添加 ProxyPass 指令。该指令将代理请求的本地 URL 映射到内容 HTTP 服务器(在第二个参数中指定)。例如,ProxyPass / http://content.mycompany.com/ 会将发往代理服务器的所有请求转发到 http://content.mycompany.com/。
    2. 在每个虚拟主机中,还必须将 ProxyPreserveHost 指令设置为“on”。这一行通知代理服务器将代理请求上的主机名设置为代理服务器上的主机名。在本例中,代理主机名是 commerce.mycompany.com,而内容主机名是 content.mycompany.com。启动此指令可以确保在将 HTTP 请求发送到 content.mycompany.com 主机时,该 HTTP 请求上的主机 Header 中设置了原始主机名 (commerce.mycompany.com)。这一行非常重要,因为 WebSphere Commerce 执行了重定向,而在重定向中指定的主机名应该是代理,而不是内容 HTTP 服务器。
    3. 如果此虚拟主机启用了 SSL,则还必须在指令中包含 SSLProxyEngine。使用以下 KeyFile 指令来设置您的 SSL 密钥文件,它包含由证书颁发机构 (CA) 签署的 SSL 证书:
      KeyFile c:\IHS2.0.47.1\ssl\mykey.kdb
                          

    4. 如果您的内容 HTTP 服务器的 SSL 证书是自签署的,请确保前面指定的密钥文件包含签署您的自签署证书的 CA 证书。如果您没有这样做,反向代理服务器就无法将请求转发到内容 HTTP 服务器,因为它不信任签署内容 HTTP 服务器的 SSL 证书的 CA。做到这一点的最简单方式是使用来自内容服务器的配置密钥文件。
    5. 您必须为 Commerce 服务器的每个端口添加一个 VirtualHost 指令。以下示例用于添加端口 443 (SSL):
      <VirtualHost commerce.mycompany.com:443>
                          Keyfile "c:\IHS2.0.47.1\ssl\keyfile.kdb"
                          SSLEnable
                          SSLClientAuth 0
                          ProxyPass / https://content.mycompany.com/
                          ProxyPreserveHost on
                          SSLProxyEngine on
                          </VirtualHost>
                          

      您可以使用本文所提供的完整 httpd.conf 配置文件。

    6. 保存该配置文件。

配置 WebSphere Commerce 以响应新的主机名

因为反向代理服务器具有不同的主机名,所以必须更新 WebSphere Application Server,以使该插件能够将入站请求正确映射到您的应用服务器。

您可以通过向 WebSphere Commerce 配置使用的每个虚拟主机添加新主机名来做到这一点。 您必须更新以下虚拟主机:

  • VH_<instance>
  • VH_<instance>_Tools
  • VH_<instance>_Admin
  • VH_<instance>_OrgAdmin

完成以下步骤来更新每个虚拟主机:

  1. 打开 WebSphere Administrative Console。
  2. 在导航面板中,展开 Environment。
  3. 单击 Virtual Hosts
  4. 单击您要更新的虚拟主机。
  5. 单击 Host Aliases。这将显示现有的别名列表。请记下主机别名使用的现有端口号。 下一步骤中您将会用到它。。
  6. 要创建新的主机别名,请单击 New
  7. 在主机名字段中输入 commerce.mycompany.com。这是反向代理服务器的主机名。
  8. 在端口字段中输入端口号。
  9. 单击 OK
  10. 单击 OK
  11. 对于每个虚拟主机,重复步骤 4-10。
  12. 保存配置。
  13. 按照 WebSphere Commerce Installation Guide 中的说明重新生成插件配置文件。
  14. 重新启动 WebSphere Commerce HTTP 服务器。
  15. 重新启动 WebSphere Commerce 服务器。

检验代理服务器的新配置

到此为止,您已经完成了代理服务器的配置,并且更新了 WebSphere Commerce Server,使之能够识别新的主机名。要检验该配置,请完成以下步骤:

  1. 启动反向代理服务器。
  2. 打开一个 Web 浏览器并导航至以下 URL:http://commerce.mycompany.com/webapp/wcs/stores/servlet/?DEBUG=1。将显示以下输出:
    							Debug mode
                    QueryString=DEBUG=1
                    Method=GET
                    ContentLength=-1
                    ServerName=commerce.mycompany.com
                    RequestURI=/webapp/wcs/stores/servlet/
                    SERVLET_PATH=/servlet
                    PathInfo=/
                    Command=
                    

  3. 尝试相同的 URL,但采用 SSL: https://commerce.mycompany.com/webapp/wcs/stores/servlet/?DEBUG=1。将显示以下输出:
    							Debug mode
                    QueryString=DEBUG=1
                    Method=GET
                    ContentLength=-1
                    ServerName=commerce.mycompany.com
                    RequestURI=/webapp/wcs/stores/servlet/
                    SERVLET_PATH=/servlet
                    PathInfo=/
                    Command=
                    

如果这其中有一处失败,您就应该启用插件跟踪来确定 WebSphere Application Server 插件是否将请求发送到 WebSphere Commerce Application Server。有关跟踪 WebSphere Application Server 插件的信息,请参阅 WebSphere Application Server Information Center

如果这些调试 URL 能够正常工作,请尝试使用代理服务器的主机名来显示您发布的存储。

结束语

本文引入反向代理服务器来增强 WebSphere Commerce 服务器的安全性。文中详细介绍了如何将 IBM HTTP Server 配置为 IBM WebSphere Commerce 的反向代理服务器。通过配置反向代理,您可以在 Internet 和 WebSphere Commerce 服务器之间增加额外一层保护。另外,您可以利用反向代理服务器提供的性能增强。

posted on 2010-11-21 10:18 Kelvin Cheng 阅读(872) 评论(1)  编辑  收藏 所属分类: 系统架构

FeedBack:
# re: 将反向代理服务器与 WebSphere Commerce 一起使用 转载[未登录] 2010-11-24 10:51 Joe
这篇文章很有用!  回复  更多评论